写某网站自动登录脚本的时候发现,登录组件是用iframe拉起来的,分别尝试了:
- 复制xpath到爬虫脚本
driver.find_element_by_xpath('/html/body/div[1]/div[2]/div[1]/div[4]/i').click()
- 选取唯一的class名
driver.find_element_by_class_name('input-login').click()
均抓取不到元素,记录下解决过程。
对于iframe套的表单要抓取元素需要多一个步骤:
- 首先抓取iframe元素
- 然后使用driver提供的switch_to_frame函数
- 之后再爬取iframe内的元素。
代码示例如下:
#start
driver.get(url=login_url)
driver.implicitly_wait(3)
#打开iframe页面
driver.find_element_by_class_name('btn').click()
driver.implicitly_wait(3)
# iframe处理
iframe = driver.find_element_by_id('UDBSdkLgn_iframe')
driver.switch_to_frame(iframe)
#抓取元素
driver.find_element_by_class_name('input-login').click()