python爬虫:selenium + webdriver + python

版权声明: https://blog.csdn.net/weixin_32393347/article/details/83904882

title: python爬虫:selenium + webdriver + python
tags: 爬虫学习,浏览器驱动,小书匠
grammar_cjkRuby: true

1.selenium 环境搭建

1.1 简介

1.2 google chrome 浏览器插件下载地址

  • ChromeDriver下载地址: http://npm.taobao.org/mirrors/chromedriver/
  • ChromeDriver安装方法
    • Windows 将解压后的文件放在python.exe 同级目录下即可
    • Linux:将文件copy到"/usr/bin/“或者”/usr/local/bin/" 目录下

1.3 python 模块安装:

$ pip install selenium

2.基本实例教程

2.1 example

# coding = utf-8
# Date = "18.11.10"
# Author = "Errol Yan"
# Describe = "驱动浏览器自动实现百度搜索"

from selenium import webdriver
import time


browser = webdriver.Chrome()
browser.maximize_window()  #将浏览器最大化显示

browser.get("http://www.baidu.com")
time.sleep(3)

browser.set_window_size(800, 500)  #参数数字为像素点,高500,长800

browser.find_element_by_id("kw").send_keys("selenium")
time.sleep(3)

browser.find_element_by_id("su").click()
time.sleep(3)

browser.back() # 浏览器后退,到百度首页
time.sleep(3)

browser.forward() #浏览器前进至百度搜索结果页
time.sleep(3)

browser.quit()

2.2 对象的定位

  • 对象的定位是自动化测试的核心也是驱动浏览器的关键所在。
  • 定位对象的目的有以下几种
    • 操作对象:单击、双击、右键
    • 获取对象的属性,如获取class的属性,name属性等
    • 获取对象的text
    • 获取对象的数量
  • 对象定位的方法:
    • id
    • name
    • class name
    • link text
    • partial link text
    • tag name
    • xpath
    • css selector

2.2.1 example 还是百度的例子

from selenium import webdriver
import time


browser = webdriver.Chrome()
browser.maximize_window()  #将浏览器最大化显示

browser.get("http://www.baidu.com")
time.sleep(3)

#id = cp 元素的文本信息
data=driver.find_element_by_id("cp").text
print data   #打印信息

browser.set_window_size(800, 500)  #参数数字为像素点,高500,长800
#####################################################################
#通过id方式定位
browser.find_element_by_id("kw").send_keys("selenium")

#通过name方式定位
browser.find_element_by_name("wd").send_keys("selenium")

#通过tag name方式定位
browser.find_element_by_tag_name("input").send_keys("selenium")

#通过class name 方式定位
browser.find_element_by_class_name("s_ipt").send_keys("selenium")

#通过CSS方式定位
browser.find_element_by_css_selector("#kw").send_keys("selenium")

#通过xphan方式定位
browser.find_element_by_xpath("//input[@id='kw']").send_keys("selenium")
time.sleep(3)
#####################################################################
browser.find_element_by_id("su").click()
time.sleep(3)

browser.back() # 浏览器后退,到百度首页
time.sleep(3)

browser.forward() #浏览器前进至百度搜索结果页
time.sleep(3)

browser.quit()

2.2.2 定位详细讲解

2.2.2.1 id and name

  • 最为常用的方式,是 id和name
  • tips:在百度首页 ctrl+ shift+c 可以实现查看百度首页的前端代码
<input id="kw" class="s_ipt" type="text" maxlength="100" name="wd" autocomplete="off">

id=”kw”
通过find_element_by_id(“kw”) 函数就是捕获到百度输入框
name=”wd”
通过find_element_by_name(“wd”)函数同样也可以捕获百度输入框

  • CSS定位
  • CSS(Cascading Style Sheets)是一种语言,它被用来描述HTML和XML文档的表现。CSS使用选择器来为页面元素绑定属性。这些选择器可以被selenium用作另外的定位策略。CSS的比较灵活可以选择控件的任意属性。
find_element_by_css_selector(“#kw”)
  • xpath
    • 什么是XPath:XPath是一种在XML文档中定位元素的语言。因为HTML可以看做XML的一种实现,所以selenium用户可是使用这种强大语言在web应用中定位元素。
xpath:attributer (属性)
driver.find_element_by_xpath("//input[@id='kw']").send_keys("selenium")

#input标签下id =kw的元素
xpath:idRelative (id相关性)
driver.find_element_by_xpath("//div[@id='fm']/form/span/input").send_keys("selenium")

#在/form/span/input 层级标签下有个div标签的id=fm的元素
driver.find_element_by_xpath("//tr[@id='check']/td[2]").click() 

# id为'check' 的tr ,定闪他里面的第2个td
xpath:position (位置)

driver.find_element_by_xpath("//input").send_keys("selenium") 

driver.find_element_by_xpath("//tr[7]/td[2]").click()

#第7个tr 里面的第2个td
xpath: href (水平参考)
driver.find_element_by_xpath("//a[contains(text(),'网页')]").click()

#在a标签下有个文本(text)包含(contains)'网页' 的元素

xpath:link
driver.find_element_by_xpath("//a[@href='http://www.baidu.com/']").click()

#有个叫a的标签,他有个链接href='http://www.baidu.com/ 的元素

2.3层级定位

场景:
假如两个控件,他们长的一模样,还都叫“张三”,唯一的不同是一个在北京,一个在上海,那我们就可以通过,他们的城市,区,街道,来找到他们。

2.3.1 清除功能

browser.find_element_by_id("kw").clear() #清除输入框的内容
browser.find_element_by_id("kw").send_keys(“XX内容”)  #输入框输入内容
browser.find_element_by_id("su").click() # 单击按钮搜索

#id = cp 元素的文本信息
data=driver.find_element_by_id("cp").text  #cp的获取

#通过submit() 来操作
driver.find_element_by_id("su").submit() # 通过提交来搜索

3 中级教程

3.1 多层框架或窗口的定位

#先找到到ifrome1(id = f1)
browser.switch_to_frame("f1")
#再找到其下面的ifrome2(id =f2)
browser.switch_to_frame("f2")

driver.switch_to_window(“windowName”)

隐式地等待一个无素被发现或一个命令完成;这个方法每次会话只需要调用一次

3.2 智能等待

driver.implicitly_wait(30)

4.键盘按键用法

from selenium.webdriver.common.keys import Keys  #需要引入keys包
driver.find_element_by_id("user_name").send_keys(Keys.TAB)
time.sleep(3)
driver.find_element_by_id("user_pwd").send_keys("123456")
#通过定位密码框,enter(回车)来代替登陆按钮
driver.find_element_by_id("user_pwd").send_keys(Keys.ENTER)
#也可定位登陆按钮,通过enter(回车)代替click()
driver.find_element_by_id("login").send_keys(Keys.ENTER)

通过send_keys()调用按键:
send_keys(Keys.TAB) # TAB
send_keys(Keys.ENTER) # 回车

#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')

4.1 中文输入问题

send_keys(u”输入中文”)

5.鼠标事件

  • context_click() 右击
    double_click() 双击
    drag_and_drop() 拖动
#定位到要右击的元素
qqq =driver.find_element_by_xpath("/html/body/div/div[2]/div[2]/div/div[3]/table/tbody/tr/td[2]")

#对定位到的元素执行鼠标右键操作
ActionChains(driver).context_click(qqq).perform()



猜你喜欢

转载自blog.csdn.net/weixin_32393347/article/details/83904882