当前位置:   article > 正文

Python中Selenium库使用教程详解_python selenium 使用

python selenium 使用

selenium介绍

selenium最初是一个自动化测试工具,而爬虫中使用它主要是为了解决requests无法直接执行JavaScript代码的问题 selenium本质是通过驱动浏览器,完全模拟浏览器的操作,比如跳转、输入、点击、下拉等,来拿到网页渲染之后的结果,可支持多种浏览器

中文参考文档

官网

环境安装

下载安装selenium

1

pip install selenium -i https://mirrors.aliyun.com/pypi/simple/

谷歌浏览器驱动程序下载地址:

http://chromedriver.storage.googleapis.com/index.html

使用示例

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

from selenium import webdriver

from time import sleep

# 实例化一款浏览器

bor = webdriver.Chrome(executable_path='chromedriver.exe')

# 对指定的url发起请求

bor.get('https://www.jd.com/')

sleep(1)

# 进行标签定位

search_input = bor.find_element_by_id('key')

# 向搜索框中录入关键词

search_input.send_keys("mac pro")

# 点击搜索按钮

btn = bor.find_element_by_xpath('//*[@id="search"]/div/div[2]/button')

btn.click()

sleep(2)

# 执行js,让滚轮向下滚动

bor.execute_script('window.scrollTo(0, document.body.scrollHeight)')

sleep(2)

page_text = bor.page_source

print(page_text)

bor.quit()

浏览器创建

Selenium支持非常多的浏览器,如Chrome、Firefox、Edge等,还有Android、BlackBerry等手机端的浏览器。另外,也支持无界面浏览器PhantomJS。

1

2

3

4

5

6

7

from selenium import webdriver

  

browser = webdriver.Chrome()

browser = webdriver.Firefox()

browser = webdriver.Edge()

browser = webdriver.PhantomJS()

browser = webdriver.Safari()

元素定位

webdriver 提供了一系列的元素定位方法,常用的有以下几种:

定位一个元素定位多个元素含义
find_element_by_idfind_elements_by_id通过元素id定位
find_element_by_namefind_elements_by_name通过元素name定位
find_element_by_xpathfind_elements_by_xpath通过xpath表达式定位
find_element_by_link_textfind_elements_by_link_tex通过完整超链接定位
find_element_by_partial_link_textfind_elements_by_partial_link_text通过部分链接定位
find_element_by_tag_namefind_elements_by_tag_name通过标签定位
find_element_by_class_namefind_elements_by_class_name通过类名进行定位
find_elements_by_css_selectorfind_elements_by_css_selector通过css选择器进行定位

注意:

1、find_element_by_xxx找的是第一个符合条件的标签,find_elements_by_xxx找的是所有符合条件的标签。

2、根据ID、CSS选择器和XPath获取,它们返回的结果完全一致。

3、另外,Selenium还提供了通用方法find_element(),它需要传入两个参数:查找方式By和值。实际上,它就是find_element_by_id()这种方法的通用函数版本,比如find_element_by_id(id)就等价于find_element(By.ID, id),二者得到的结果完全一致。

实例演示

假如有一个web页面,通过前端工具查看到一个元素的属性是这样的。

1

2

3

4

5

6

7

<html>

 <head>

 <body link="#0000cc">

 <a href="/" rel="external nofollow" onmousedown="return c({'fm':'tab','tab':'logo'})">

 <form name="f" action="/s">

  <span ></span>

  <input name="wd" value="" maxlength="255" autocomplete="off">

通过id定位:

1

dr.find_element_by_id("kw")

通过name定位:

1

dr.find_element_by_name("wd")

通过class name定位:

1

dr.find_element_by_class_name("s_ipt")

通过tag name定位:

1

dr.find_element_by_tag_name("input")

通过xpath定位,xpath定位有N种写法,这里列几个常用写法:

1

2

3

4

5

6

7

dr.find_element_by_xpath("//*[@]")

dr.find_element_by_xpath("//*[@name='wd']")

dr.find_element_by_xpath("//input[@]")

dr.find_element_by_xpath("/html/body/form/span/input")

dr.find_element_by_xpath("//span[@]/input")

dr.find_element_by_xpath("//form[@]/span/input")

dr.find_element_by_xpath("//input[@ and @name='wd']")

通过css定位,css定位有N种写法,这里列几个常用写法:

1

2

3

4

5

6

dr.find_element_by_css_selector("#kw")

dr.find_element_by_css_selector("[name=wd]")

dr.find_element_by_css_selector(".s_ipt")

dr.find_element_by_css_selector("html > body > form > span > input")

dr.find_element_by_css_selector("span.soutu-btn> input#kw")

dr.find_element_by_css_selector("form#form > span > input")

假如页面上有如下一组文本链接

1

2

<a href="http://news.baidu.com" rel="external nofollow" name="tj_trnews">新闻</a>

<a href="http://www.hao123.com" rel="external nofollow" name="tj_trhao123">hao123</a>

通过link text定位:

1

2

dr.find_element_by_link_text("新闻")

dr.find_element_by_link_text("hao123")

通过partial link text定位:

1

2

3

dr.find_element_by_partial_link_text("新")

dr.find_element_by_partial_link_text("hao")

dr.find_element_by_partial_link_text("123")

控制浏览器

常用的控制浏览器操作的一些方法

方法说明
set_window_size()设置浏览器的大小
back()控制浏览器后退
forward()控制浏览器前进
refresh()刷新当前页面
clear()清除文本
send_keys (value)模拟按键输入
click()单击元素
submit()用于提交表单
get_attribute(name)获取元素属性值
is_displayed()设置该元素是否用户可见
size返回元素的尺寸
text获取元素的文本

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/595350
推荐阅读
相关标签