Scrapy+Selenium 获取iframe下的document

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

Scrapy+Selenium 获取iframe下的document_第1张图片

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

使用xpath获取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

即可获得结果。

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

你可能感兴趣的:(scrapy,selenium)