seleniumWebdriver

安装Selenium库

pip install selenium

测试,新建一个 .py文件输入如下内容

from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
print(driver.title)
driver.quit()

执行完之后,会打印出 “百度一下,你就知道”

下载浏览器驱动

chrome https://sites.google.com/a/chromium.org/chromedriver/home

firefox https://github.com/mozilla/geckodriver/releases

其它的自行搜索

设置浏览器驱动

frome selenium import webdriver
driver = webdriver.Firefox()   # Firefox浏览器
driver = webdriver.Chrome()    # Chrome浏览器
driver = webdriver.Ie()        # Internet Explorer浏览器
driver = webdriver.Edge()      # Edge浏览器
driver = webdriver.Opera()     # Opera浏览器
driver = webdriver.PhantomJS()   # PhantomJS

元素定位

selenium提供了8种定位方式

id
name
class name
tag name
link text
partial link text
xpath
css selector

这8种定位方式对应的方法为:

find_element_by_id()
find_element_by_name()
find_element_by_class_name()
find_element_by_tag_name()
find_element_by_link_text()
find_element_by_partial_link_text()
find_element_by_xpath()
find_element_by_css_selector()

定位方法的用法

假如有一个web页面,通过前端工具获取到元素属性如下

<html>
  <head>
  <body link="#0000cc">
	<a id="result_logo" href="/" onmousedown="return c({'fm':'tab','tab':'logo'})">
	<form id="form" class="fm" name="f" action="/s">
	  <span class="soutu-btn"></span>
		<input id="kw" class="s_ipt" name="wd" value="" maxlength="255" autocomplete="off">

目标:定位input标签的输入框

通过id定位:

driver.find_element_by_id("kw")

通过name定位:

driver.find_element_by_name("wd")

通过class name定位:

driver.find_element_by_class_name("s_ipt")

通过tag定位:

driver.find_element_by_tag_name("input")

通过xpath定位,xpath定位写法很多,这里列出几种常用的做参考:

driver.find_element_by_xpath("//*[@id='kw']")
driver.find_element_by_xpath("//*[@name='wd']")
driver.find_element_by_xpath("//input[@class='s_ipt']")
driver.find_element_by_xpath("/html/body/form/span/input")
driver.find_element_by_xpath("//span[@class='soutu-btn']/input")
driver.find_element_by_xpath("//form[@id='form']/span/input")
driver.find_element_by_xpath("//input[@id='kw' and @name='wd']")

通过css定位,css定位写法同样有很多, 也列出几种做参考:

driver.find_element_by_css_selector("#kw")
driver.find_element_by_css_selector("[name=wd]")
driver.find_element_by_css_selector(".s_ipt")
driver.find_element_by_css_selector("html > body > form > span > input")
driver.find_element_by_css_selector("span.soutu-btn> input#kw")
driver.find_element_by_css_selector("form#form > span > input")

接下来,我们的页面上有一组文本链接。

<a class="mnav" href="http://news.baidu.com" name="tj_trnews">新闻</a>
<a class="mnav" href="http://www.hao123.com" name="tj_trhao123">hao123</a>

通过link text完整内容定位:

driver.find_element_by_link_text("新闻")
driver.find_element_by_link_text("hao123")

通过link text部分内容定位:

driver.find_element_by_partial_link_text("新")
driver.find_element_by_partial_link_text("hao")
driver.find_element_by_partial_link_text("123")

控制浏览器操作

控制浏览器窗口大小

有时候我们希望能以某种浏览器尺寸打开,让访问的页面在这种尺寸下运行。例如可以将浏览器设置成移动端大小(480* 800),然后访问移动站点,对其样式进行评估;WebDriver提供了set_window_size()方法来设置浏览器的大小。

from selenium import webdriver

driver = webdriver.Chrome()
drvier.get("https://m.baidu.com")

# 参数数字单位为像素
print("设置浏览器宽400,高800显示")
driver.set_window_size(400, 800)
driver.maximize_window()	# 浏览器全屏显示
driver.quit()

控制浏览器后退、前进

在使用浏览器浏览网页时,浏览器提供了后退和前进按钮,可以方便地在浏览过的网页之间切换,WebDriver也提供了对应的back()和forward()方法来模拟后退和前进按钮。下面通过例子来演示这两个方法的使用。

from selenium import webdriver

driver = webdriver.Chrome()

first_url = 'https://www.baidu.com'
driver.get(first_url)

second_url = 'https://www.sina.com.cn'
driver.get(second_url)

# 后退到first_url
driver.back()

# 前进到second_url
driver.forward()

刷新页面

有时需要手动刷新页面

driver.refresh()

点击和输入

前面我们已经学习了定位元素, 定位只是第一步, 定位之后需要对这个元素进行操作, 或单击(按钮) 或输入(输入框) , 下面就来认识 WebDriver 中最常用的几个方法:

clear(): 清除文本。 send_keys (value): 模拟按键输入。 click(): 单击元素。

from selenium import webdriver

driver = webdriver.Chrome()
driver.get('https://www.baidu.com')

driver.find_element_by_id("kw").clear()
driver.find_element_by_id("kw").send_keys("selenium")
dirver.find_element_by_id("su").click()

提交

submit() 该方法用于提交表单,例如在搜索框输入关键字后回车的操作就可以使用该方法模拟

from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://www.baidu.com")

search_text = driver.find_element_by_id('kw')
search_text.send_keys("selenium")
search_text.submit()

其它常用方法

size: 返回元素的尺寸。 text: 获取元素的文本。 get_attribute(name): 获得属性值。 is_displayed(): 设置该元素是否用户可见。

最后更新于