Scrapy+Selenium 获取iframe下的document

需求:获取iframe h3下的标题,img的源,及a标签的落地页

1577952778.jpg

需要先熟悉Selenium的同学:点击学习

使用xpath获取iframe下的内容为空,如图

<iframe data-v-5a33f2b6="" id="preview-iframe-18769" class="idea-preview-iframe" style="height: 259.817px;" frameborder="0"></iframe>

可采用execute_script运行js获取,获取iframe下的document使用[iframe标签].contentWindow.document

# 当前iframe有多个,而且id是动态的。首先找到id
temp_iframe_id = box.xpath('.//td[3]/div/div/div/iframe/@id').extract()[0]
# 广告落地页  重试三次 因为是动态渲染,可能存在未渲染结束问题
for i in range(0, 3):
    try:
        item['landing_page'] = self.browser.execute_script(
            'return document.getElementById("' + temp_iframe_id + '").contentWindow.document.getElementsByTagName("a")[0].href')
        break
    except JavascriptException as e:
        logging.info("没找到落地页")
        time.sleep(1)
# 创意名称 
for i in range(0, 3):
    try:
        item['creative_title'] = self.browser.execute_script(
            'return document.getElementById("' + temp_iframe_id + '").contentWindow.document.getElementsByTagName("h3")[0].innerText')
        break
    except JavascriptException as e:
        logging.info("没找到标题")
        time.sleep(1)
# 创意图片链接 思路:先找到所有的img标签,再遍历拿到src数组返回
for i in range(0, 3):
    try:
        item['images'] = self.browser.execute_script(
            'var images = document.getElementById("' + temp_iframe_id
            + '").contentWindow.document.getElementsByTagName("img");'
              'var imgURLs=new Array(images.length);'
              'for(var i = 0;i<images.length;i++){ imgURLs[i] = images[i].src;}'
              'return imgURLs;')
        break
    except JavascriptException as e:
        logging.info("没找到创意链接")
        time.sleep(1)

即可获得结果。

{
 "creative_title": "手机产生大量缓存垃圾,影响手机速度,请立即清理",
 "images": ["http://static.wkanx.com/w002/M00/04/2C/CgIXGF3vetuAFFfMAABUij8AZa024.jpeg?t=8d5bfab5c8eac5c980c360add3384f37&w=648&h=360"],
 "landing_page": "http://static.wkanx.com/w002/M00/04/6F/CgIXgV4DLW6AMV2cARFMEYnYn9A511.apk?t=7e12bede36f56c60e2b00329f6faea68"
 }

对js不熟悉的同学提前在console(控制台)试了能用再拉过来哦~

原文链接

💡 更多好文欢迎关注我的公众号~

公众号

推荐阅读更多精彩内容