Mac os上配置selenium

一. 环境
  1. python2.x&&python3.x
  2. Chrome浏览器
  3. chromedriver : http://npm.taobao.org/mirrors/chromedriver/2.36/
二. 配置
  1. 导入selenium,这里使用了豆瓣源,速度很快
    pip install selenim -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
  2. 将下载的Chromedriver放到自己喜欢的文件夹。或者直接放到usr/local/bin中也可以
from selenium import webdriver
 
def browser():
	# 因为我是直接放在了usr/local/bin下,所以不需要指定路径,否则需要制定路径
	# 例如driver = webdriver.Chrome("User/用户/test/chromedriver")
    driver = webdriver.Chrome() # 创建一个浏览器对象
    driver.get('http://www.baidu.com') # 使用浏览器对象对网址发起请求
    print(driver.title)
	print(browser.page_source) # 获取网页的源代码
	print(browser.current_url) # 获取此次请求的地址
	print(browser.get_cookies()) # 获取此次请求的Cookie信息
    driver.find_element_by_id('kw').send_keys('复仇者联盟') # 定位输入框并输入内容
    driver.find_element_by_id('su').click() # 定位搜索框并点击
    time.sleep(3)
    driver.quit() # 退出浏览器
 
if __name__ == '__main__':
	browser()
三. 关于selenium
  1. selenium是一个网页自动化测试的一个工具,使用它可以操作浏览器来模拟人操作浏览器的行为。
selenium在爬虫中的应用:
  1. 获取动态网页数据,一些动态的数据在网页源代码中并没有显示,这时候可以考虑用selenium获取。
  2. 用于模拟登陆,对于一些需要登陆才能获取到数据的网页,一般如果采用分析参数破解的话,需要耗费大量的时间和精力进行网站的登陆的破解,而如果使用selenium的话,就可以完全模拟人的登陆行为来进行网站登陆,就不需要分析参数进行网站的破解。
selenium的特点:
  1. 它是通过驱动浏览器来进行网页的登陆,或者是获取网页的信息。
  2. 由于selenium是驱动浏览器进行数据的爬取,而浏览器的打开,对网页的请求,渲染页面都需要耗费大量的时间,所以一般不使用selenium进行网站数据的爬取,除非无法通过分析请求的方式进行网站登陆,或者网站是动态网站,页面源代码中获取不到数据的这种情况下,才考虑使用selenium来进行爬取。
  3. selenium提供一些元素定位和查找的方法都是用纯Python实现的。效率比较低,
  4. selenium是免费开源的,支持很多的主流浏览器,IE,Chrome,Opera,FireFox,Safari等。
四. selenium操作浏览器
  1. maximize_window():浏览器窗口最大化
  2. minimize_window():浏览器窗口最小化
  3. set_window_size():设置浏览器窗口大小,(第一个参数:宽,第二个参数高)
  4. back():浏览器后退
  5. forword():浏览器前进
  6. refresh():刷新页面
  7. current_window_handle:浏览器当前选项卡(浏览器窗口)
  8. window_handles:浏览器打开的所有选项卡(浏览器窗口)
  9. switch_to_window:切换浏览器选项卡(切换浏览器窗口)
  10. close():关闭当前浏览器选项卡(浏览器窗口)
  11. quit():关闭浏览器
五. selenium操作鼠标
  1. 推荐一个练习selenium的网站:http://sahitest.com/demo/clicks.htm
4.1 鼠标点击事件:
  1. click():单机鼠标左键
    double_click():鼠标左键双击
    context_click():鼠标右键单击
    click_and_hold():单击鼠标左键不松开
    release():松开鼠标左键
from selenium import webdriver
import time
from selenium.webdriver.common.action_chains import ActionChains
browser = webdriver.Chrome()
browser.get('http://sahitest.com/demo/clicks.htm')
time.sleep(3)
# 定义一个ActionChains类的对象,参数是浏览器的对象
# ActionChains类,需要一个参数:浏览器对象,当调用相关鼠标操作函数的时候,这些事件并不会立刻执行,而是将所有的鼠标事件都放入到了一个队列当中,只有执行perform函数的时候,所有的鼠标事件才会被执行。
action = ActionChains(browser)
click_me = browser.find_element_by_xpath('//input[@value="click me"]')
double_click = browser.find_element_by_xpath('//input[@value="dbl click me"]')
right_click_me = browser.find_element_by_xpath('//input[@value="right click me"]')
action.click(click_me)
action.click(double_click)
action.context_click(right_click_me)
time.sleep(3)
action.perform()
4.2 鼠标移动事件:
  1. move_to_element():鼠标移动至某个元素
    move_by_offset(x,y):鼠标移动到当前位置的某个坐标
    move_to_element_with_offset(element,x,y):移动到距离某个元素(多少距离)的位置

browser = webdriver.Chrome()
# driver.minimize_window() 窗口最小化  在mac中使用会出现异常。在Windows中可以。
# brower.maximize_window() 窗口最大化
browser.get('http://sahitest.com/demo/mouseover.htm')
time.sleep(2)
action = ActionChains(browser)
move_element = browser.find_element_by_xpath("//input[@value='Write on hover']")
action.move_to_element(move_element)
move_element1 = browser.find_element_by_xpath('//a[@href="x"]/span')
action.move_to_element(move_element1)
action.perform()
3. 鼠标拖拽事件

就不举栗子了。想试试的同学网站是:http://sahitest.com/demo/dragDropMooTools.htm

  1. drag_and_drop():拖拽到某个元素后松开
  2. drag_and_drop_by_offset(source,x,y):拖拽到距离某个坐标点多少的位置然后松开
六. selenium操作键盘

send_keys():输入字符串
clear():清空文本框
send_keys(Keys.CONTROL,‘a’):全选ctrl+a
send_keys(Keys.CONTROL,‘x’):剪切ctrl+x
send_keys(Keys.CONTROL,‘c’):复制ctrl+c
send_keys(Keys.CONTROL,‘v’):粘贴ctrl+v
send_keys(Keys.ENTER):回车键:enter
send_keys(Keys.SPACE):空格键:Space
send_keys(Keys.BACK_SPACE):退格键:BACK_SPACE
send_keys(Keys.ESCAPE):退出键:Esc
send_keys(Keys.TAB):制表键:Tab
send_keys(Keys.F1):键盘 F1

driver=webdriver.Chrome()
driver.get("http://sahitest.com/demo/label.htm")
time.sleep(3)
input1=driver.find_element_by_xpath('//label/input')
input2=driver.find_element_by_xpath('//tr/td[2]/input')
input1.send_keys('123456')
time.sleep(3)
input1.send_keys(Keys.CONTROL,'a')
time.sleep(3)
input1.send_keys(Keys.CONTROL,'x')
time.sleep(3)
input2.send_keys(Keys.CONTROL,'v')
time.sleep(3)
input2.clear()
七. selenium的显性等待和隐形等待
  1. 背景:
    一个网页在通过selenium驱动浏览器打开的时候,可能会由于网络慢,或者电脑卡顿,导致页面一时半会加载不完整,页面中的一些标签和样式没有渲染出来。但是,代码执行速度很快,当通过使用代码定位元素的时候,可能就会出现要查找的元素不存在的情况,代码会报异常
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
browser = webdriver.Chrome()
browser.get('https://weibo.com')
# WebDriverWait这个类是用于设置显性等待的。经常配合着until使用,在页面加载期间,每隔一定的短时间去查看元素是否被加载出来,如果没有加载出来,则继续等待,直到超出最大的等待时间,如果最后还是没有找到该元素,则最终抛出异常,如果在最大的时间范围内找到了该元素,则继续往后执行代码。
a_element = WebDriverWait(browser, 10).until(lambda browser: browser.find_element_by_link_text('动漫'))
print(a_element)
# 隐形等待和time.sleep类似,设置一个最长等待时间,如果网页在规定的时间内加载完毕,则执行下一步,否则会一直处于等待状态,直到超时,一般一个程序内,只调用一次这样的方法即可。
browser.implicitly_wait(10)
a_element = browser.find_element_by_link_text('动漫')
print(a_element)
  1. 隐形等待implicitly_wait和显性等待WebDriverWait的区别:
    1.隐形等待implicitly_wait是针对一整个页面,或者说一个浏览器窗口而言,它是等待整个页面的元素被加载完成,而不是针对某一个元素,它是等整个页面上的所有元素渲染完成之后,在进行查抄和定位。
    2. 显性等待WebDriverWait是针对某一个元素而言,不是等到整个页面元素的渲染完成,而是等待某一个元素渲染完成,然后再去定位该元素,所以,每一个元素是否出现都可以使用显性等待来进行判断。
  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值