selenium经典操作

1.防止浏览器闪退

driver=webdriver.Chrome()
替换成
drive = webdriver.ChromeOptions()
drive.add_experimental_option('detach', True)
driver = webdriver.Chrome(options=drive)

2.避免selenium被识别

selenium做爬虫能解决很多反爬问题,但是selenium也有很多特征可以被识别,比如用selenium驱动浏览器后window.navigator.webdriver值是true,而正常运行浏览器该值是未定义的(undefined)

# 使用chrome开发者模式
options = webdriver.ChromeOptions()
options.add_experimental_option('excludeSwitches', ['enable-automation'])
# 禁用启用Blink运行时的功能
options.add_argument("--disable-blink-features=AutomationControlled")
# Selenium执行cdp命令  再次覆盖window.navigator.webdriver的值
driver = webdriver.Chrome(options=options)
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
    "source": """
                    Object.defineProperty(navigator, 'webdriver', {
                      get: () => undefined
                    })
                  """
})

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

3.滚动条滑到底

静态页面

driver.execute_script('window.scrollTo(0,document.body.scrollHeight)')

动态页面

def func():
    # 初始滚动条距离顶部的距离
    temp_height = 0
    while True:
        # 滑动滚动条1000像素
        driver.execute_script("window.scrollBy(0,1000)")
        # sleep一下让滚动条反应一下
        time.sleep(5)
        # 获取当前滚动条距离顶部的距离
        check_height = driver.execute_script(
            "return document.documentElement.scrollTop || window.pageYOffset || document.body.scrollTop;")
        # 如果两者相等说明到底了
        if check_height == temp_height:
            break
        temp_height = check_height

4.窗口操作

切换窗口

# 切换界面 0代表的第一个最开始打开的窗口 1代表的第二个  -1切换到最新打开的窗口
driver.switch_to.window(driver.window_handles[1])

打开多窗口

# 打开多窗口 
driver.execute_script("window.open('https://www.douban.com')")

5.下拉列表操作

from selenium.webdriver.support.select import Select

# 首先定位到下拉列表
sele=driver.find_element(By.XPATH,'xpath路径')
# 然后对元素进行包装,包装成下拉菜单
sel=Select(sele)
# 让浏览器在下拉列表进行选择,len(sel)是下拉列表中的数据数量,i就是每一个下拉框选项的索引位置
for i in range(len(sel)):
     # 按照索引进行切换
     sel.select_by_index(i)
     time.sleep(1)

6.iframe操作

selenium是拿不到iframe里的数据的,如果想要拿到首先定位iframe然后再切换视角到iframe,最后再拿想要的数据。

# 定位iframe标签
iframe=driver.find_element(By.XPATH,'xpath路径')
# 切换到指定的iframe
driver.switch_to.frame(iframe)
# 在进入到指定的iframe后开始拿想要的数据
text=driver.find_element(By.XPATH,'xpath路径').text
# 回到默认的界面,也就是退出iframe
driver.switch_to.default_content()

7.鼠标操作(动作链)

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)--拖拽到某个元素然后松开
key_down(value,element=None)--按下某个键盘上的键
key_up(value,element=None)--松开某个键
move_to_element(to_element)--鼠标移动到某个元素
perform()--执行链中所有的动作
release(on_element=None)--在某个元素位置松开鼠标左键
send_keys(*key_to_send)--发送某个键到当前焦点的元素
send_keys_to_element(element,*key_to_send)--发送某个键到指定元素
move_by_offset(x,y) --鼠标从当前位置移动到某个坐标
move_to_element_with_offset(to_element, x, y) --移动到距某个元素(左上角坐标)多少距离的位置

8.键盘操作

send_keys(Keys.Back_SPACE):删除键
send_keys(Keys.SPACE):空格键
send_keys(Keys.ENTER):回车键
send_keys(Keys.TAB):制表键
send_keys(Keys.CONTROL,'a'):全选
send_keys(Keys.CONTROL,'c'):复制
send_keys(Keys.CONTROL,'x'):剪切
send_keys(Keys.CONTROL,'v'):粘贴

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值