关于Selenium
模拟浏览器,IE系列、谷歌、火狐、Safari等浏览器都可模拟。
使用时需安装被模拟的浏览器驱动。
安装
pip install selenium
在CMD(windows环境)中按照上步安装好selenium,然后百度要模拟的浏览器驱动,下载对应的驱动版本。版本是exe程序,有包的解压一下,便捷使用的话需放在python路径里,例如我电脑里driver存在的路径在C:\Users\Administrator\AppData\Local\Programs\Python\Python37-32文件夹里。
Q:代码运行时提示驱动不可用。我的chrome浏览器版本是80打头,驱动是81打头。
A:卸载了80版本浏览器,正好手头有82版本的,安装后再运行就能调用了。但我还不确定使用驱动的时候是否需要本地有同版本浏览器。
使用示例
#此示例用来获取指定网页的部分评论信息。先在浏览器开发者模式下看好需要读取的页面的html特征,
#这里观察到div下class为“con”的里面包含评论,评论的tag为p。
from selenium import webdriver
import time
#chromedriver若不在python路径下,需用executable_path参数指定地址
driver = webdriver.Chrome()
driver.implicitly_wait(20)#隐性等待,最长等20秒
#用驱动打开网页
driver.get("http://www.bilibili.com/bangumi/play/ss29343")
time.sleep(5)
#这里注意elements与element的区别
comments = driver.find_elements_by_css_selector('div.con')
#遍历匹配到的div里的p标签内容,即所需评论
for eachcomment in comments:
content = eachcomment.find_element_by_tag_name('p')
print(content.text)
注意不同的driver在调用时,方法名是不同的。
Selenium选择元素的方法:
● find_element_by_css_selector:通过元素的class选择,如<divclass='bdy-inner'>test</div>可以使用find_element_by_css_selector ('div.bdy-inner')。
● find_element_by_xpath:通过xpath选择,如<formid="loginForm"> 可以使用driver.find_element_by_xpath("//form[@id='loginForm']")。
● find_element_by_id:通过元素的id选择,如<div id='bdy-inner'>test</div>可以使用driver.find_element_by_id(' bdy-inner')。
● find_element_by_name:通过元素的name选择,如<inputname="username"type="text" />可以使用driver.find_element_by_name('password')。
● find_element_by_link_text:通过链接地址选择,如<ahref="continue. html">Continue</a>可以使用driver.find_element_by_link_text('Continue')。
● find_element_by_partial_link_text:通过链接的部分地址选择,如<a href="continue. html">Continue</a>可以使用driver.find_element_by_partial_link_text('Conti')。
● find_element_by_tag_name:通过元素的名称选择,如<h1>Welcome</h1>可以使用driver.find_element_by_tag_name('h1')。● find_element_by_class_name:通过元素的class选择,如<pclass="content">Site content goes here.</p>可以使用driver.find_element_by_class_name ('content')。