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()
浙公网安备 33010602011771号