3

python 包之 selenium 自动化使用教程

 2 years ago
source link: https://blog.51cto.com/autofelix/5141742
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

python 包之 selenium 自动化使用教程

原创
pip install Selenium

二、初始化浏览器

  • Chrome 是初始化谷歌浏览器

  • Firefox 是初始化火狐浏览器

  • Edge 是初始化IE浏览器

  • PhantomJS 是一个无界面浏览器。

from selenium import webdriver

driver = webdriver.Chrome()

三、设置浏览器大小

  • maximize_window 最大化窗口

  • set_window_size 自定义窗口大小

from selenium import webdriver

driver = webdriver.Chrome()
driver.maximize_window()

四、访问页面

from selenium import webdriver

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

五、定位元素

  1. 通过元素id定位

  • 定位一个元素:find_element_by_id()
  • 定位多个元素:find_elements_by_id()
  1. 通过元素name定位

  • 定位一个元素:find_element_by_name()
  • 定位多个元素:​find_elements_by_name()​
  1. 通过xpath表达式定位

  • 定位一个元素:find_element_by_xpath()
  • 定位多个元素:find_elements_by_​xpath()​
  1. 通过完整超链接定位

  • 定位一个元素:find_element_by_link_text()
  • 定位多个元素:find_elements_by_link_text()​
  1. 通过部分链接定位

  • 定位一个元素:find_element_by_partial_link_text()
  • 定位多个元素:find_elements_by_partial_link_text()​
  1. 通过标签定位

  • 定位一个元素:find_element_by_tag_name()
  • 定位多个元素:find_elements_by_tag_name()​
  1. 通过类名进行定位

  • 定位一个元素:find_element_by_class_name()
  • 定位多个元素:find_elements_by_class_name()​
  1. 通过css选择器进行定位

  • 定位一个元素:find_element_by_css_selector()
  • 定位多个元素:​find_elements_by_css_selector()​
# 找到百度首页的输入框
from selenium import webdriver

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

六、定位元素另一种写法

  • 需引入By模块

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get('https://www.baidu.com')
driver.find_element(By.ID, 'kw')

七、元素的交互

  • 点击某个元素:click()

  • 模拟输入:send_keys()

  • 清除操作:clear()

  • 提交表单:submit()

  • 获取元素的属性值:get_attribute(name)

  • 获取元素的位置:location

  • 获取元素的文本值:text

  • 获取元素的大小:size

  • 获取元素的id值:id

  • 获取元素的标签名:tag_name

# 在百度输入框中输入我是autofelix,并点击搜索按钮
from selenium import webdriver

driver = webdriver.Chrome()
driver.get('https://www.baidu.com')
driver.find_element_by_id('kw').send_keys('我是autofelix')
driver.find_element_by_id('su').click()

八、执行JS

from selenium import webdriver

driver = webdriver.Chrome()
driver.maximize_window()

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

js_sql = '''
document.getElementById('kw').value = '我是autofelix'
'''
driver.execute_script(js_sql)

九、操作Frame

  • 网页中frame的话,需要执行切入切出操作

  • switch_to.from(子iframe的id名称) 切入

  • switch_to.parent_frame(父iframe的id名称) 切出

from selenium import webdriver

driver = webdriver.Chrome()
driver.maximize_window()

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

//这个网址并没有iframe,我臆测有,你们看看就行
driver.switch_to.frame('我臆测出来的iframe')

十、cookie操作

  • 删除当前页面所有cookies:delete_all_cookies()

  • 获取指定cookie值:get_cookie(name)

  • 获取当前页面所有cookies值:get_cookies()

  • 设置cookie值:add_cookie()

from selenium import webdriver

driver = webdriver.Chrome()
driver.maximize_window()

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

driver.delete_all_cookies()
driver.add_cookie({'name': 'name', 'domain': '.baidu.com', 'value': 'autofelix'})

十一、选项卡管理

  • 保存所有选项卡的元组:window_handles

  • 切换选项卡:switch_to.window()

from selenium import webdriver

driver = webdriver.Chrome()
driver.maximize_window()

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

driver.switch_to.window(driver.window_handles[0])
driver.switch_to.window(driver.window_handles[1])

十二、鼠标事件

  • 鼠标事件需要引入ActionChains模块

  • 鼠标右击:move_to_element(above)

  • 鼠标双击:double_click()

  • 左键按住拖动:drag_and_drop()

  • 动作存储:perform()

# 滑动滑块验证码
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 初始化谷歌浏览器
driver = webdriver.Chrome()

# 最大化窗口
driver.maximize_window()

# 打开头条登陆网址
driver.get('https://sso.toutiao.com')

# 等待某个元素是否出现
WebDriverWait(self.driver, 10).until(
EC.text_to_be_present_in_element((By.XPATH, '//*[@id="mobile-code-get"]/span'), u'发送')
)

# 实例化鼠标操作
action = ActionChains(self.driver)

# 按住滑块
action.click_and_hold(self.driver.find_element_by_xpath('//*[@id="captcha_container"]')).perform()

# 将滑块移动x的距离
action.move_by_offset(xoffset=x, yoffset=0).perform()

# 释放滑块
action.release().perform()

十三、等待

  • 隐氏等待:​如果到一定时间,指定的元素还没有出现,进程不会阻塞,但是到指定时间还没有找到,就会抛出异常

  • 显示等待:​如果在一定时间内,指定的元素没有出现,进程会阻塞在这里,如果到指定时间还没有找到,就会抛出异常

# 隐氏等待
from selenium import webdriver

driver = webdriver.Chrome()
driver.implicitly_wait(10)

driver.get('https://www.baidu.com')
# 显示等待
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()
driver.implicitly_wait(10)

driver.get('https://www.baidu.com')
WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, 'kw'))
)

十四、前进后退刷新

  • 后退:back()

  • 前进:forward()

  • 刷新:refresh()

from selenium import webdriver

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

driver.back()
driver.forward()
driver.refresh()

十五、关闭浏览器

  • 关闭当前标签页:close()

  • 关闭整个浏览器:quit()

from selenium import webdriver

driver = webdriver.Chrome()
driver.get('https://www.baidu.com')
//打开百度页面后,关闭整个浏览器
driver.quit()
  • 收藏
  • 评论
  • 分享
  • 举报

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK