1.首先安装selenium:
pip install selenium
2.初步体验
先用个小例子感受下:这里我们用 Chrome 浏览器来测试,方便查看效果,到真正爬取的时候换回 PhantomJS 即可。
# browser = webdriver.PhantomJS
browser = webdriver.Chrome()
url = 'https://www.zhihu.com/'
browser.get(url)
3.浏览器驱动下载
默认下载到:“Python27/”目录下
4.实战
browser = webdriver.Chrome()
url = 'https://www.zhihu.com/'
browser.get(url)
# 点击登陆按钮,这里在浏览器中右键—>检查,在右边出现的代码中右键—>copy->Copy Xpath。就可以获取xpath
browser.find_element_by_xpath('//*[@id="root"]/div/main/div/div/div/div[2]/div[2]/span').click()
# 找到用户名输入框
obj = browser.find_element_by_xpath('//*[@id="root"]/div/main/div/div/div/div[2]/div[1]/form/div[1]/div[2]/div[1]/input')
obj.clear()
obj.send_keys('****')
obj = browser.find_element_by_xpath('//*[@id="root"]/div/main/div/div/div/div[2]/div[1]/form/div[2]/div/div[1]/input')
obj.clear()
obj.send_keys('****')
browser.find_element_by_xpath('//*[@id="root"]/div/main/div/div/div/div[2]/div[1]/form/button').click()
time.sleep(5)
# 截图并保存
browser.save_screenshot('zhihu.jpg')
time.sleep(20)
#
开头代表选择
id
,其后紧跟
id
的名称,以点(.)开头代表选择class
,其后紧跟class
的名称。标签名筛选,直接用标签名字即可
5.问题
一,NoSuchElementException:
原因:可能是网页还没加载出来
处理方法:
1. 延迟一段时间:time.sleep(3)
2. WebDriverWait(browser, 60).until(browser.find_element(By.ID, '***'))
原因:需要一些交互式操作,如点击按钮等
原因:有些网站需要滚动才能显示剩下的内容:
处理方法:
js="document.documentElement.scrollTop=10000" #拖动滚动条到屏幕底端
driver.execute_script(js)