**
关于爬取网页的时候,抓不到元素,报没有这样元素的错误
**
前言:
这里是先抓到了第一页的信息,然后通过构造的网址进入了第二个界面,然后出现抓不到第二个网页的元素问题
'''
**网上的解决方式是:**
打开了新的窗口句柄,需要切换到第二个窗口,才能抓到
我这里不是这个问题
driver可以有多个window窗口,在浏览器中显示为多个标签,
比如点击一个链接 网易,会打开一个新的窗口
webdriver类中的所有方法有一个前提条件是:都作用于某一window handle
window handle不会自动切换,如果打开了一个新的窗口,想在新窗口上获取某一元素,需要先手动切换window handle,driver.switch_to.window(xxx_handle)
用driver.window_handles可以获取所有窗口句柄
窗口句柄是浏览器拥有的,元素没有窗口句柄
driver的current handle也不会自动切换,如果current window handle被关闭,那么current_handle这个值就取不到了,会报异常,需要手动调用driver.switch_to.window 来显示切换。
如果元素定位失败,要检查一下是不是打开了新的窗口,如果是,则需要切换window handle,因为它不会自动切换
'''
以下是切换:
for handle in browser.window_handles: #方法二,始终获当前最后的窗口
browser.switch_to_window(handle)
browser.find_element_by_xpath("//div[@id='body']/div[2]/div/div/ul[2]/div/a").click()
然后继续操作
我这测试的时候,两个句柄都一样,意味着没有打开新的窗口,就直接覆盖原来的窗口了,哈哈
那么来了,是我抓的原数据就不对
后来发现直接使用
text=driver.execute_script("return document.documentElement.outerHTML")
从这个里面提取想要的
这个打印出来是不对应的,但是正常使用xpath是可以的,就离谱