python库-webdriver基本使用

Posted SibomSun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python库-webdriver基本使用相关的知识,希望对你有一定的参考价值。

   在门外美丽繁华



是一个可以模拟浏览器点击之类的库

非常实用

安装命令

pip install selenium

然后需要安装对应浏览器的驱动,这里使用chrome

访问网址,找到对应版本

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

下载后放到Chrome的exe文件夹下

然后就可以写相关代码了

from selenium import webdriver# 可以显示这个title控件driver = webdriver.Chrome()driver.get('https://www.baidu.com')print(driver.title)driver.quit()

可以运行就能用

会发现非常强大


selenium定位方法

Selenium提供了8种定位方式。

idnameclass nametag namelink textpartial link textxpathcss selector

这8种定位方式在Python selenium中所对应的方法为:

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页面,通过前端工具(如,Firebug)查看到一个元素的属性是这样的。

<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定位:

dr.find_element_by_id("kw")
通过name定位:
dr.find_element_by_name("wd")
通过class name定位:
dr.find_element_by_class_name("s_ipt")
通过tag name定位:
dr.find_element_by_tag_name("input")
通过xpath定位,xpath定位有N种写法,这里列几个常用写法:
dr.find_element_by_xpath("//*[@id='kw']")dr.find_element_by_xpath("//*[@name='wd']")dr.find_element_by_xpath("//input[@class='s_ipt']")dr.find_element_by_xpath("/html/body/form/span/input")dr.find_element_by_xpath("//span[@class='soutu-btn']/input")dr.find_element_by_xpath("//form[@id='form']/span/input")dr.find_element_by_xpath("//input[@id='kw' and @name='wd']")
通过css定位,css定位有N种写法,这里列几个常用写法:
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")
接下来,我们的页面上有一组文本链接。
<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定位:
dr.find_element_by_link_text("新闻")dr.find_element_by_link_text("hao123")
通过link text定位:
dr.find_element_by_partial_link_text("新")dr.find_element_by_partial_link_text("hao")dr.find_element_by_partial_link_text("123")


控制打开窗口的大小

driver.set_window_size(480, 800)

网页后退前进

driver.back()driver.forward()

刷新网页

driver.refresh()

点击和输入

clear():#清除文本。send_keys (value):#模拟按键输入。click():#单击元素。size:#返回元素的尺寸。text:#获取元素的文本。get_attribute(name):#获得属性值。is_displayed():#设置该元素是否用户可见。例码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")driver.find_element_by_id("su").click()
# 获得输入框的尺寸size = driver.find_element_by_id('kw').sizeprint(size)
# 返回百度页面底部备案信息text = driver.find_element_by_id("cp").textprint(text)
# 返回元素的属性值, 可以是 id、 name、 type 或其他任意属性attribute = driver.find_element_by_id("kw").get_attribute('type')print(attribute)
# 返回元素的结果是否可见, 返回结果为 True 或 Falseresult = driver.find_element_by_id("kw").is_displayed()print(result)driver.quit()


鼠标方法

在 WebDriver 中, 将这些关于鼠标操作的方法封装在 ActionChains 类提供。

ActionChains 类提供了鼠标操作的常用方法:

perform():#执行所有 ActionChains 中存储的行为;context_click():#右击;double_click():#双击;drag_and_drop():#拖动;move_to_element():#鼠标悬停。

例码

from selenium import webdriver# 引入 ActionChains 类from selenium.webdriver.common.action_chains import ActionChains
driver = webdriver.Chrome()driver.get("https://www.baidu.cn")
# 定位到要悬停的元素above = driver.find_element_by_link_text("设置")# 对定位到的元素执行鼠标悬停操作ActionChains(driver).move_to_element(above).perform()

……


键盘事件

Keys()类提供了键盘上几乎所有按键的方法。前面了解到, send_keys()方法可以用来模拟键盘输入, 除此 之外, 我们还可以用它来输入键盘上的按键, 甚至是组合键, 如 Ctrl+A、 Ctrl+C 等。

from selenium import webdriver# 引入 Keys 模块from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome()driver.get("http://www.baidu.com")
# 输入框输入内容driver.find_element_by_id("kw").send_keys("seleniumm")
# 删除多输入的一个 mdriver.find_element_by_id("kw").send_keys(Keys.BACK_SPACE)

# 输入空格键+“教程”driver.find_element_by_id("kw").send_keys(Keys.SPACE)driver.find_element_by_id("kw").send_keys("教程")
# ctrl+a 全选输入框内容driver.find_element_by_id("kw").send_keys(Keys.CONTROL, 'a')
# ctrl+x 剪切输入框内容driver.find_element_by_id("kw").send_keys(Keys.CONTROL, 'x')
# ctrl+v 粘贴内容到输入框driver.find_element_by_id("kw").send_keys(Keys.CONTROL, 'v')
# 通过回车键来代替单击操作driver.find_element_by_id("su").send_keys(Keys.ENTER)driver.quit()

需要说明的是, 上面的脚本没有什么实际意义, 仅向我们展示模拟键盘各种按键与组合键的用法。

from selenium.webdriver.common.keys import Keys

在使用键盘按键方法前需要先导入 keys 类。


以下为常用的键盘操作:

send_keys(Keys.BACK_SPACE) 删除键(BackSpace)send_keys(Keys.SPACE) 空格键(Space)send_keys(Keys.TAB) 制表键(Tab)send_keys(Keys.ESCAPE) 回退键(Esc)send_keys(Keys.ENTER) 回车键(Enter)send_keys(Keys.CONTROL,'a') 全选(Ctrl+A)send_keys(Keys.CONTROL,'c') 复制(Ctrl+C)send_keys(Keys.CONTROL,'x') 剪切(Ctrl+X)send_keys(Keys.CONTROL,'v') 粘贴(Ctrl+V)send_keys(Keys.F1) 键盘 F1……send_keys(Keys.F12) 键盘 F12




更多内容:http://www.testclass.net/selenium_python











一键关注带来更多干货【也许】






以上是关于python库-webdriver基本使用的主要内容,如果未能解决你的问题,请参考以下文章

Python的基本库与第三方库

python爬虫笔记----4.Selenium库(自动化库)

浅谈python中selenium库调动webdriver驱动浏览器的实现原理

将现有的 Webdriver 对象传递给 Robot Framework 的自定义 Python 库

python的webdriver库每次调用浏览器都会弹出一个类似命令提示符的黑框,怎么关闭?

用python实现模拟登录,突破反爬限制,Selenium库详解(附全部源代码)