现在许多网站都不是静态网站(静态加载HTML文档),大部分使用javaScripr或者Ajax技术加载一些数据,使用普通的爬虫程序爬取不到这些数据,因为普通的爬虫程序没有能力执行javaScript程序,在javaScript程序执行之前就返回爬取到的整个页面的数据了。因此使用Selenium模拟浏览器访问网站来获取网页文档。
1.安装Selenium框架
pip install Selenium
安装谷歌浏览器的驱动chromedriver.exe,并复制到Python的scripts目录下,其他浏览器下载相对应的驱动
下载网址:http://npm.taobao.org/mirrors/chromedriver/
2.
3.Selenium查找HTML元素
使用xpath查找主要有两个函数:
(1)find_element_by_xpath(xpath):查找xpath匹配的第一个元素,如果找到就返回一个WebElement类型对象,找不到就抛出异常;
(2)find_elements_by_xpath(xpath):查找xpath匹配到的所有元素组成的的列表,每个元素都是一个WebElement类型对象,找不到就返回空列表;
(3)任何一个WebElement对象都可以再调用find_element_by_xpath和find_element_xpath函数
(4)id是唯一的,根据id的值查找元素:函数find_element_by_id(id的值)查找id编号的第一个元素,如果查找到就返回一个WebElement对象,如果没有找到就抛出异常
(5)根据name的值查找元素:find_element_by_name(name的值),查找匹配的第一个元素,如果找到就返回一个WebElement类型对象,如果找不到就抛出异常;find_elements_by_name(name的值),查找匹配的所有元素组成的列表,每一元素都是一个WebElement类型对象,如果找不到就返回空列表
(6)使用css查找元素:find_element_by_css_selector(css),查找css匹配的第一个元素,如果找到就返回一个WebElement类型对象,如果找不到就抛出异常;find_elements_by_css_selector(css),查找css匹配的所有元素组成的列表,每一个元素都是一个WebElement类型对象,如果找不到就返回空列表。
例如:find_element_by_css_selector("div[class='info'] span[name='mark']")
find_element_by_css_selector("div[class='info']>div")
(7)使用tag name查找元素:find_element_by_tag_name("tag"),查找匹配的第一个元素,如果找到就返回一个WebElement类型对象,如果找不到就抛出异常;find_elements_by_tag_name("tag"),查找匹配的所有元素组成的列表,每一元素都是一个WebElement类型对象,如果找不到就返回空列表
(8)使用文本查找超级链接:find_element_by_link_text(text),查找第一个文本值为text的超级链接元素<a>,如果找到就返回一个WebElement类型对象,如果找不到就抛出异常;find_elements_by_link_text(text),查找所有文本值为text的超级链接元素<a>,如果找到就返回一个列表,每一元素都是一个WebElement类型对象,如果找不到就返回空列表;
find_element_by_partial_link_text(text),查找第一个文本值包含text的超级链接元素<a>,如果找到就返回一个WebElement类型对象,如果找不到就抛出异常;find_elements_by_partial_link_text(text),查找所有文本值包含text的超级链接元素<a>,如果找到就返回一个列表,每一元素都是一个WebElement类型对象,如果找不到就返回空列表
(9)使用class查找元素:find_element_by_class_name(class的值),查找匹配的第一个元素,如果找到就返回一个WebElement类型对象,如果找不到就抛出异常;find_elements_by_class_name(class的值),查找匹配的所有元素组成的列表,每一元素都是一个WebElement类型对象,如果找不到就返回空列表
4.查找元素的文本与属性
通过WebElement对象就可以查找到它的文本与属性
(1)任何一个WebElement对象都可以通过text属性获取它的文本,元素的文本值是它与它的所有子孙节点的文字的组合,如果没有返回空字符串;
(2)任何一个WebElement对象都可以通过get_attrbute(attrName)获取名称为attrName的属性值,如果元素没有attrName属性就返回None
5.Selenium使用动作元素:先要查找到元素,再使用下面的函数
(1)clear()函数:模拟清除element元素中的所有文字;
(2)send_keys(string)函数:模拟键盘输入字符串string;这个函数不但可以模拟输入一般的文字,而且可以模拟输入回车、退格等键盘动作,selement提供了一个Keys类,其中提供了很多常用的不可见的特殊按键,主要有Keys.BACKSPACE退格删除键和Keys.ENTER回车键
(3)click()函数模拟鼠标的点击动作
来源:CSDN
作者:初学者中的小白
链接:https://blog.csdn.net/qq_41671718/article/details/102921824