Selenium模块的使用(二)

selenium处理iframe
- 如果定位的标签存在于iframe标签之中,则必须使用switch_to.frame(id)
- 动作链(拖动):from selenium.webdriver import ActionChains
- 实例化一个动作链对象:action = ActionChains(bro)
- click_and_hold(div):长按且点击操作
- move_by_offset(x,y)
- perform()让动作链立即执行
- action.release()释放动作链对象

from selenium import webdriver
from selenium.webdriver import ActionChains
import time
bro = webdriver.Chrome(executable_path='./chromedriver.exe')
bro.get('https://c.runoob.com/front-end/61')
# iframe标签 可在当前页面下嵌套子页面
# 获得当前页面的子页面的标签
bro.switch_to.frame('iframeResult')  # 改变浏览器标签定位的作用域
div = bro.find_element_by_id('ha')
action = ActionChains(bro) # 实例化动作链
action.click_and_hold(div) # 点击长按指定的标签
for i in range(5):
    # move_by_offse(x,y) x水平方向 y竖直方向 移动
    # perform() 执行动作链操作
    action.move_by_offset(16,0).perform()
    time.sleep(0.3)

# 释放动作链
action.release()
bro.quit()

Selenium实现模拟登录

示例:QQ空间模拟登录

from selenium import webdriver
import time
bro = webdriver.Chrome(executable_path='./chromedriver')
# 发送请求
bro.get('https://qzone.qq.com/')

# # 改变浏览器标签定位的作用域
bro.switch_to.frame('login_frame')

# 点击账号密码登陆
btn = bro.find_element_by_id('switcher_plogin')

# 点击按钮
btn.click()
time.sleep(1)

# 找到用户名 密码输入框
user = bro.find_element_by_id('u')
pwd = bro.find_element_by_id('p')

# 输入用户名 密码
user.send_keys('1121434897')
time.sleep(1)
pwd.send_keys('123456')
time.sleep(1)

# 找到登录按钮
submit = bro.find_element_by_id('login_button')

# 点击按钮
submit.click()
time.sleep(2)
bro.quit()

检测规避

现在不少大网站有对selenium采取了监测机制。比如正常情况下我们用浏览器访问淘宝等网站的 window.navigator.webdriver的值为

undefined。而使用selenium访问则该值为true。那么如何解决这个问题呢?

只需要设置Chromedriver的启动参数即可解决问题。在启动Chromedriver之前,

为Chrome开启实验性功能参数excludeSwitches,它的值为[‘enable-automation’],完整代码如下:

from selenium.webdriver import Chrome
from selenium.webdriver import ChromeOptions
option = ChromeOptions()
option.add_experimental_option('excludeSwitches', ['enable-automation'])
driver = Chrome(options=option)
原文地址:https://www.cnblogs.com/sxy-blog/p/13215544.html