selenium遇到的问题及解决方法

424 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第3天,点击查看活动详情 在开始之前,分享一下使用selenium常遇到的几个问题和报错:

一、首先就是版本问题的报错:selenium.common.exceptions.NoSuchWindowException: Message: no such window: target window already closed。遇到这种情况,就是chromedriver的版本和Chrome版本不对应造成的,解决方法是:

首先要打开Chrome,在右上角打开设置,然后进去关于chrome查看浏览器版本, 步骤:1.点开Chrome右上角的三个点;2.点开设置;3.找到最下面的关于chrome;4.找到浏览器的版本

具体的操作如图所示:

image.png

image.png 5.找到浏览器的版本后,打开chromedriver的官网

chromedriver.storage.googleapis.com/index.html)…

ps:如果没有一样的版本就找到最接近的版本进行下载,我这里的Chrome的版本是106.0.5249.119,这里Chromedriver没有匹配的版本,所以我下载的最接近的版本,也就是106.0.5249.61。如图所示:

image.png 6.Windows系统的只有32位版本的,直接下载就行了。如果是其他的系统记得下载对应的版本 二、第二个问题:selenium.common.exceptions.WebDriverException: Message: Service xxxxstaus:1

今天爬取淘宝时发现会有滑块验证,然后参考了网上的一些,其中有一个是改变chromedriver中的某个字符串的值,今天亲测了一下,没有用具体的解决办法是使用第三方库pyautogui移动鼠标到滑块上并实现拖动具体的用法可以去搜一下。参考网上的改了值以后发现就包这个错误selenium.common.exceptions.WebDriverException: Message: Service xxxxstaus:1查了半天也没找出问题,后面卸载了chromedriver重新安装了一下,问题就解决了

三、首先分享一下前两天爬取某宝数据时遇到的一些问题,第一个问题是模拟登陆时就被检测到了,之前的文章讲过为什么会被检测到以及应对的方法,今天分享一个更加实用的方法


driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument",{
            "source":"""
              Object.defineProperty(navigator,'webdriver',{
                get: () => undefined
              })
              """
        })

直接在打开浏览器之前注入这段js代码,这段代码的作用就是修改navigator的属性值,如果不放心的可以在打开之后二次注入这个js代码,确保不会被检测

四、下面分享一下遇到的一些问题,

第一个问题, execute_cdp_cmd这个函数无法找到,原因是selenium版本过低,更新到最 新的selenium的版本

第二个问题,有的网站加载页面过慢,可以使用wait.until方法,字面意思直到定位到指定位置再 进行下一步的操作,这样就可以避免一些报错,例如登录时就需要检测到登录按钮以后才能点击,不然后 面的代码就会报错

第三个问题,单次爬取的信息量大,此时就需要程序主动的休眠,使用time库添加程序的休眠时间,这样可以一定程度 上避免被检测

第四个问题,webdriver的问题,我也遇到过很多次webdriver出错的情况,无非三种情况:

1.webdriver版本过低,需要更新到与谷歌浏览器最接近的版本

2.路径问题:每次加上webdriver的路径

  1. 系统环境问题,有的大型的网站就需要mac和windows两个系统的版本例如某宝