使用seleium时遇到的坑
1. 当在chrome中使用‘--headless’不打开UI执行时,driver.get(url)比一般的模式慢很多,打开网页很多都超过了35s,具体原因不清楚,有说是要加上
chrome_options.add_argument('--no-proxy-server') chrome_options.add_argument("--proxy-server='direct://'"); chrome_options.add_argument("--proxy-bypass-list=*");
的,但我测试的结果是没什么反应,后开加上这一句就好了,也就是不去下载图片,具体为什么下载图片这么慢就不清楚了,网上有国外网友说是headless模式gpu展现比较慢(I'm pretty sure it's slowing down because of the disabled GPU rendering.)
chrome_options.add_argument('blink-settings=imagesEnabled=false')
但此时虽然driver.get(url)是快了,但发现打开后driver.current_url得到的是类似于https://www.linkstars.com/click.php?feedback=640_0_184__6dcb489fb11b7638&to=https%3A%2F%2Fwww.kaola.com%2Fproduct%2F8309000.html,一个中间页面,经测试图片不下载之后无法跳转到最终页面,看来跳转有依赖于图片的,分析了下网络请求发现https://www.linkstars.com/favicon.ico 这个请求比较可疑?
2. driver.get(url)后面如果不加上time.sleep(4),则也不会得到最终的地址,我想应该是driver.get(url)不加上sleep得到的是跳转之前的地址,它可能在第一张页面加载完就继续往下执行了,而不会等跳转的页面结束,加上一个sleep等待跳转完成
3. find_elements_by_xpath和find_element_by_xpath要分清,前面会找出所有的,后面只会找到第一个
4. 在爬取微博图片时,取一个按钮点击,发现click失效,但元素是可以取到的(可以打印出值)。但在屏幕中显示的时候,那个按钮在下拉条有拖动的情况,其实被toolbar给挡掉了,如果 broswer.execute_script("window.scrollTo(0, 2);")拉到顶,在按钮没被挡掉的情况下就可以,或者用js的方式点击: driver.execute_script(
"arguments[0].click();"
, element)
img_to_small_button = item_selector.find_element_by_xpath('.//a[@action-type="feed_list_img_toSmall"]')
print(img_to_small_button.get_attribute('innerHTML')) // 打出 “<i class="W_ficon ficon_arrow_fold S_ficon">k</i>收起”,说明元素可以取到
webdriver.ActionChains(broswer).move_to_element(img_to_small_button).click(img_to_small_button).perform()
5. 在用find_elements_by_xpath时只能取到标签级,如像下面想取得src的列表会报错:The result of the xpath expression ".//li[@action-type="fl_pics"]/img/@src" is: [object Attr]. It should be an element.
item_selector.find_elements_by_xpath('.//li[@action-type="fl_pics"]/img/@src')