S++

千线一眼

导航

python爬虫-深入selenium模块

更多的selenium自动化操作

我们之前尝试了如何使用selenium操作浏览器,但是并没有更多的去使用。
其实我们可以使用selenium去做更多的事情,如搜索、点击按钮、滚动页面等等
下面我们以淘宝网为例来实现一下

"""
selenium模块的更多自动化操作:
    - 搜索
    - 点击
    - 滚动
"""
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service


# 淘宝搜索
def taobao_find(bro, word):
    # 定位到搜索栏
    search_input = bro.find_element(by=By.XPATH, value='//input[@id="q"]')
    # 标签交互(搜索一下word
    search_input.send_keys(word)

    # 定位到搜索按钮
    search_bottom = bro.find_element(by=By.XPATH, value='//form[@id="J_TSearchForm"]/div[1]/button')
    # 点击
    search_bottom.click()
    # 淘宝网需要登录才能显示搜索


# 执行js代码,淘宝滚动屏幕
# 滚动1屏幕高的像素值:window.scrollTo(0,document.body.scrollHeight)
def do_js(bro, js_code):
    bro.execute_script(js_code)


if __name__ == '__main__':
    # 实例化谷歌浏览器对象
    service = Service('./chromedriver')
    bro = webdriver.Chrome(service=service)
    # 请求淘宝页面
    url = 'https://www.taobao.com'
    bro.get(url=url)

    do_js(bro, 'window.scrollTo(0,document.body.scrollHeight)')
    taobao_find(bro, 'python')
    # 回退到之前的页面
    bro.back()
    # 当然你也可以前进:bro.forward()
    
    # 关闭浏览器对象
    bro.quit()

selenium处理iframe

什么是iframe:IFRAME是HTML标签,作用是文档中的文档,或者浮动的框架(FRAME)。iframe元素会创建包含另外一个文档的内联框架(即行内框架)。
iframe经常被用到登录框、图片滑动验证码等上。

"""
selenium 处理 iframe
"""
import time
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service

if __name__ == '__main__':
    # 实例化谷歌浏览器对象
    service = Service('./chromedriver')
    bro = webdriver.Chrome(service=service)
    # 请求页面
    url = 'https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable'
    bro.get(url=url)
    # 我们需要找到可拖拽块的位置
    # 但是这个块在iframe标签里
    bro.switch_to.frame('iframeResult')  # 我们需要先先找到指定的iframe,参数传入id就行
    # 现在就可以找到块了
    drag_div = bro.find_element(by=By.XPATH, value='//*[@id="draggable"]')
    print(drag_div)

    # 使用动作链:from selenium.webdriver import ActionChains
    # 实例化动作链对象
    action = ActionChains(bro)
    # 动作是点击并长按可拖拽块
    action.click_and_hold(drag_div)
    # 缓慢向右拖动可拖拽块
    for i in range(6):
        # perform表示立即执行动作链操作
        action.move_by_offset(40, 0).perform()  # 一次性偏移(x,y)个像素
        # 别太快,设置点间隔
        time.sleep(0.2)

    # 释放动作链
    action.release().perform()

    time.sleep(5)
    # 关闭浏览器对象
    bro.quit()

posted on 2022-03-19 17:17  S++  阅读(73)  评论(0)    收藏  举报