python|selenium 控制浏览器基础教学

selenium 控制浏览器基础教学 标签(空格分隔): selenium python
在ubuntu下安装给python3装selenium python|selenium 控制浏览器基础教学
文章图片

在ubuntu在配置Firefox和chrome的driver geckodriver下载地址
chromedriver下载地址
将其解压后放到/usr/bin目录下 (如果报错就将其放到/bin/目录下面)

sudo tar -xzvf geckodriver-v0.20.0-linux64.tar.gz -C /usr/bin cd /usr/bin sudo chmod +x geckodriver

基本操作 1.输入字符与点击事件
示例网站: https://www.baidu.com

from selenium import webdriver driver = webdriver.Firefox() # Firefox #driver = webdriver.Chrome() # Chrome driver.get('https://www.baidu.com') driver.find_element_by_id('kw').send_keys('selenium') driver.find_element_by_id('su').click()

这里我们用selenium操控浏览器进行了输入字符以及点击操作
而找到浏览器上的元素的对应位置我用的是它自带的函数,其他常用定位函数如下
find_element_by_id("kw1") find_element_by_name("wd") find_element_by_tag_name("input") find_element_by_class_name("input_wd") find_element_by_css_selector("input[id=\"kw1\"]") find_element_by_xpath("/html")

这些函数后面的传入的值分别是对应位置的id号,对应位置的name,其他同理,这个得看具体情况
特别注意的是by_class_name这个函数,有的网站会出现一个标签class名字之间有空格,它的意思是这个
class可以叫空格前面的名称,也可以叫空格后面的名称,你写的时候就写一个就行,不要一起复制下来
比如
python|selenium 控制浏览器基础教学
文章图片

你可以叫这个class为groom-module也可以叫home-card
2.进入框架以及登录获取cookie
示例网站: https://mail.qq.com/cgi-bin/loginpage
【python|selenium 控制浏览器基础教学】
from selenium import webdriver driver = webdriver.Firefox() # Firefox #driver = webdriver.Chrome() # Chrome driver.get('https://mail.qq.com') driver.switch_to.frame('login_frame') driver.find_element_by_id('u').send_keys('123123123') driver.find_element_by_id('p').send_keys('121312132') driver.find_element_by_id('login_button').click()

我们首先尝试直接去寻找元素的位置,发现报错,不能找到元素,这是因为登录框在框架里,
所以,我们要首先找到这个框架,然后再寻找元素的位置。
要的得到cookie很简单
登录之后
cookies = driver.get_cookies() driver1 = webdriver.Firefox() driver1.get('https://mail.qq.com') for cookie in cookies: driver1.add_cookie(cookie) driver1.refresh() #你已经用cookie登录成功了

3.键盘与鼠标事件 比如现在你想看一部漫画,可是你却不想动手去点,这时候就用得上了
直接上代码
import time from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChains js = 'document.documentElement.scrollTop=4000' driver = webdriver.Firefox() driver.maximize_window() driver.get('http://www.1kkk.com/ch16-257601/#ipg1') #driver.implicitly_wait(5) #隐式等待 next_page = driver.find_element_by_id('cp_img') driver.execute_script(js) whether_end = driver.find_elemnet_by_xpath('//*[@id="last-mask"]') while( 'block' in whether_end): ActionChains(driver).click(next_page).perform() time.sleep(3) whether_end = driver.find_element_by_xpath('//*[@id="last-mask"]')

由于这网站本身的原因可能运行时会出点问题
ActionChains就是解决鼠标事件的类
下面是它的一些方法
click(on_element=None) ——单击鼠标左键 click_and_hold(on_element=None) ——点击鼠标左键,不松开 context_click(on_element=None) ——点击鼠标右键 double_click(on_element=None) ——双击鼠标左键 drag_and_drop(source, target) ——拖拽到某个元素然后松开 drag_and_drop_by_offset(source, xoffset, yoffset) ——拖拽到某个坐标然后松开 key_down(value, element=None) ——按下某个键盘上的键 key_up(value, element=None) ——松开某个键 move_by_offset(xoffset, yoffset) ——鼠标从当前位置移动到某个坐标 move_to_element(to_element) ——鼠标移动到某个元素 move_to_element_with_offset(to_element, xoffset, yoffset) ——移动到距某个元素(左上角坐标)多少距离的位置 perform() ——执行链中的所有动作 release(on_element=None) ——在某个元素位置松开鼠标左键 send_keys(*keys_to_send) ——发送某个键到当前焦点的元素 send_keys_to_element(element, *keys_to_send) ——发送某个键到指定元素

而Keys是解决键盘事件的类
from selenium.webdriver.common.keys import 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

学完这些,基本的对浏览器的控制就差不多了,还有些内容没讲到,以后会补充

    推荐阅读