selenium 爬虫
本文于 1577 天之前发表,文中内容可能已经过时。
安装 selenium
pip install -U selenium
ps: 在安装的过程中如果遇到被墙的问题的,很容易 timeout
在mac 环境下需要修改下载源
1 | cd ~ |
接着进入vim编辑,写入
1 | [global] |
内核安装
selenium 等待页面加载完成。
强制等待,目前用着是最好用的一个操作,
1 | time.sleep |
隐式等待
1 | driver.implicitly_wait(10) |
显示等待,有些时候执行不成功,具体原因还得定位,在python里面不好用,在java里面挺好用的
1 | element = WebDriverWait(driver, 10).until( |
后台执行
当需要在服务端运行的时候,这个非常有用。
1 | chrome_options = Options() |
form 表单模拟登陆
如下,非常简单的操作,通过send_keys 就可以给表单对象设置value
1 | uInput = dr.find_element_by_id("username") |
调用对应的事件
java:
1 | Actions action = new Actions(driver); |
回退和前进
java 回退
1 | driver.navigate().back(); |
java 前进
1 | driver.navigate().forward(); |
多页面,切换页面
1 | Set<String> set = driver.getWindowHandles(); |
selenium 反爬机制
目前在爬取 问财 网站的时候遇到了 反爬的机制,反爬机制的原因是因为selenium的一个特征机制被识别,导致爬虫失效。
可以添加 如果配置项消除 selenium 特征。
1 | chrome_options.add_argument("--disable-blink-features") |
selenium方式的优劣
优势:虽然通过浏览器内核,是简单的通过http模拟是媲美不了的,如果ajax很多,而且有很多拼接操作的页面,通过http请求,分析各个接口的含义需要花很多的时间,这个时候通过selenium通过浏览器内核直接抓取页面元素会方便很多。
劣势:比如模拟表单提交,如果ajax请求很少,或者没有,只有一次请求,但是又有很多动态的元素生成,这种情况下直接分析请求报文是更简单的操作。