selenium
selenium原本使用来做自动化测试的,在爬虫中应用于模拟用户使用浏览器,爬取一些加密复杂的网站,致命缺点就是太慢了。
selenium安装与配置环境
要使用这个模块首先要安装这个模块,在pycharm终端pip可以直接下载。
pip install selenium
安装好模块之后还要下载一个浏览器驱动。根据浏览器不同,下载对应的浏览器驱动。以下均已谷歌浏览器为例。 Google浏览器驱动. 根据浏览器版本下载相应版本的浏览器驱动(在谷歌浏览器右上角的三个点里找到帮助–>关于谷歌可以查看自己浏览器的版本),如果找不到版本对应的浏览器驱动,就下载比自己版本低一级的浏览器驱动,照样能用。(如上图,直接下载 94.0.4606.61版本的驱动),点击进去后,按照系统选择下载,windows操作系统都是下载win32版本。下载完成之后直接把驱动移到和python解释器同一级目录下。 名字只能为这个,记得重命名改成这个:chromedriver(后缀不管)。
selenium基本操作
from selenium.driver import Chrome
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
web = Chrome()
web.get('https://www.baidu.com')
web.find_element(By.XPATH, '//*[@id="changeCityBox"]/p[1]/a').send_keys('python',Keys.ENTER)
selenium窗口切换
因为selenium默认不切换窗口
web.switch_to.window(web.window_handles[-1])
web.close()
web.switch_to.window(web.window_handles[0])
selenium报错(当前只遇到三种,后续补上)
1.elenium.common.exceptions.ElementClickInterceptedException: Message: element click inte 原因:元素定位相互覆盖。 解决方案:js注入 报错代码:
window.find_element(By.XPATH, './div[1]/div[1]/div[1]/a/h3').click()
更改后:
element1 = window.find_element(By.XPATH, './div[1]/div[1]/div[1]/a/h3')
web.execute_script("arguments[0].click();", element1)
2.selenium.common.exceptions.StaleElementReferenceException: Message: stale element reference 这种代码多半是你的网速太慢,跟不上爬虫爬取的速度,网页还未加载完全,爬虫就开始了爬取工作。这里建议你把电脑拿去转转app卖了或者是导入time模块使用time.sleep()让你的爬虫休眠几秒,等到浏览器加载完成后继续工作。 3.selenium.common.exceptions.NoSuchElementException后面还一串忘了 这个是没有查找到你想要的element,重新检查find_element
|