一 前言
环境: window 10
python3.10 selenium 4.21
随便记录一些容易犯错或理解错误或比较有意思的一些点
二 内容
1 关于驱动webdiver的下载使用
以前通常是,根据浏览器的版本下载好合适的浏览器驱动到本地电脑,然后使用的时候配置好驱动路径
如下:
chromedriver_path = r"D:\xxxxxxxxx" # 这里替换为你下载的webdriver的路径
service = Service(chromedriver_path)
driver = webdriver.Chrome(service=service, options=chrome_options)
前端时间发现这个版本有个方法能自动下载配置合适的驱动,再也不用手动去下载驱动了,
之前隔一段时间去运行代码都报错,原因就是浏览器更新了,要重新下载合适的驱动
service = Service(ChromeDriverManager().install())
driver = webdriver.Chrome(service=service, options=chrome_options)
具体是从哪一个版本开始可以这样使用没去细究,以前3的时候好像没这种用法
这种方法启动浏览器之前的等待时间好像比手动下载的方法时间要长一丢丢
2 关于异常的处理
try:xxxxxelement = driver.find_element(xxxxx)
except Exception as e:xxxxx正式的业务处理逻辑xxx
如上一段伪代码,想在找不到某个元素的时候写处理逻辑,但Exception捕获的范围太大了,它不仅能捕获元素未找到的异常,还能捕获很多其他的代码异常,如果是其它异常,这就不是我们想要的了,因此最好是明确捕获元素未找到的一场NoSuchElementException
try:xxxxxelement = driver.find_element(xxxxx)
except NoSuchElementException as e:xxxxx正式的业务处理逻辑xxx
3 关于页面元素不可点击
判断一个元素是否可点击,有种常用的方法是
#如果没有抛出异常,说明元素可点击
element = wait.until(EC.element_to_be_clickable((By.xx, xxxxx)))
但有时候,这个方法也不管用,如在豆瓣读书上 点击下一页的时候
不断点击[后页]按钮,来跳转到新的一页,当其不可点击时,
try:wait2 = WebDriverWait(driver, 1)page_wait = wait2.until(EC.element_to_be_clickable((By.XPATH, '//*[@class="next"]')))logger.info(f'page: {page_wait}')next_button = driver.find_element(By.XPATH, '//*[@class="next"]')next_button.click()
except Exception as e:logger.info(f"点击下一页出现异常")raise