python selenium翻页_python+selenium总整理

1 安装包和驱动

1.1 包pip install selenium

1.2 驱动

浏览器驱动下载地址

Chrome:https://sites.google.com/a/chromium.org/chromedriver/downloads​sites.google.com

Edge:https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/​developer.microsoft.com

Firefox:https://github.com/mozilla/geckodriver/releases​github.com

Safari:https://webkit.org/blog/6900/webdriver-support-in-safari-10/​webkit.org

1.3 查看浏览器版本chrome://version/

注:使用该方式查看浏览器版本时,会自动更新最近版本浏览器。

2 调用浏览器

2.0 导入相关包

from selenium import webdriver

# Keys 用来模拟键盘按键,如`F1`

from selenium.webdriver.common.keys import Keys

2.1 主流浏览器Google

webdriver.Chrome()

Firefox

webdriver.Firefox()

IE

webdriver.Ie()

Safari

webdriver.Safari()

Edge

webdriver.Edge()

2.2 优化用户体验旧版浏览器

option = webdriver.ChromeOptions()

option.add_experimental_option("useAutomationExtension", False)

option.add_experimental_option('excludeSwitches', ["ignore-certificate-errors"])

driver = webdriver.Chrome(options=option)最新版浏览器

option = webdriver.ChromeOptions()

option.add_argument('disable-infobars')

driver = webdriver.Chrome(options=option)

2.3 打开指定网页

url = 'http://www.baidu.com'

driver.get(url)

2.4 获取当前网址

url = driver.current_url # 用于跳转界面

3 查找元素

index

抓取元素:

element = driver.find_element_by_id("passwd-id")

element = driver.find_element_by_name("passwd")

element = driver.find_element_by_tag_name("input")

# 相对路径

element = driver.find_element_by_xpath("//input[@id='passwd-id']")

# 绝对路径

element = driver.find_element_by_xpath("html/body//div[2]/input/")以上查找都是只返回找到的第一个元素,尽管存在多个重名的元素。

4 操作元素

4.1 填充表单

element.send_keys("要填充的文本")以上填充,如果文本框已存在内容,将会在保留原内容基础上,在其后继续添加

element.send_keys("要填充的文本", Keys.ARROW_DOWN)BACKSPACE(或者BACK_SPACE) ——退格、删除键

TAB ——有时可用来切换input框的焦点

ENTER ——回车键,有时可用来代替点击提交按钮

SHIFT(或LEFT_SHIFT) ——和其他按键同时发送,可发送大写字母或特殊符号

CONTROL(或LEFT_CONTROL) ——和其他按键同时发送可实现一些功能如‘CONTROL+A’、‘CONTROL+C’、‘CONTROL+X’、‘CONTROL+V’等等

ALT(或LEFT_ALT) ——和其他键一起使用

SPACE ——输入空格,或选中checkbox、radio框

PAGE_UP/PAGE_DOWN ——通过按键可上下翻页

F1~F12 ——功能键

4.2 清除文本

# 填充文本前,建议清除文本框内容

element.clear()

4.3 选择按钮

element.click() # 模拟鼠标点击

element.submit() # 模拟点击提交按钮两者略有不同,click方法更保险。

submit方法,WebDriver 会在表单中寻找它所在的表单,如果发现这个元素并没有被表单所包围,那么程序会抛出 NoSuchElementException 的异常。

4.4 下拉选项卡

方法1

# 定位到该元素区域

element = driver.find_element_by_xpath("//select[@name='name']")

# element = driver.find_element_by_xpath("//select[@id='id']")

# 找到该元素区域下的所有`option`子元素

all_options = element.find_elements_by_tag_name("option")

# 遍历所有选项

for option in all_options:

print("Value is:%s" % option.get_attribute("value"))

option.click()

方法2

# 导入选择器

from selenium.webdriver.support.ui import Select

element = driver.find_element_by_xpath("//select[@name='name']")

# element = driver.find_element_by_xpath("//select[@id='id']")

select = Select(element)

select.select_by_index(index) # 该索引并不是计数索引,而是html源码设定的值

select.select_by_visible_text("text")

select.select_by_value(value)x.find_elements_by_*()可以查找多个重名元素,以列表形式返回取消所有选择select.deselect_all()

查看已选select.all_selected_options

获取所有选项select.options

5 处理网页内嵌 - frame

网页中内嵌另一个网页,因此在获取网页元素中,需明确告知在哪一个网页中定位该元素!

forFrameTest

定位frame:

driver.switch_to.frame(reference)

# referencr 可以为index,即计数变量; id; name;driver.find_element_by_tag_name('xx');

可以嵌套定位,也可以返回上一级,甚至最高级;

# 一级一级切入

driver.switch_to.frame('frame1')

driver.switch_to.frame('frame2')

#返回上一级

driver.switch_to.parent_frame()

# 返回主文档

driver.switch_to_default_content()

6 处理弹窗 - alert

弹窗一般是警告、通知等信息

# 获取弹窗

alert = driver.switch_to_alert()

# 打印弹窗信息

print(alert.text)

# 接受或拒绝弹窗内容

alert.accept()

alert.dismiss()

7 等待元素加载

7.1 笨方法

直接在定位元素前设置等待时间

import time

time.sleep(2) # 等待2s

7.2 复杂方法

selenium设置间隔时间(500ms)不断定位该元素,一旦该元素定位成功就执行下一条语句,这在异步框架的网站中很常见

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.get("http://somedomain/url_that_delays_loading")

try:

element = WebDriverWait(driver, 10).until(

EC.presence_of_element_located((By.ID, "myDynamicElement"))

)

# element = WebDriverWait(driver,10).until(

#EC.element_to_be_clickable((By.ID,'someid')))

finally:

driver.quit()

8 网页操作

8.1 网页前进和后退

driver.forward()

driver.back()

8.2 网页关闭和退出

driver.close()

driver.quit()

8.3 重新加载页面

driver.refresh()

9 进阶 - Keysclick(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) ——发送某个键到指定元素

参考资料

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值