二、控制现有浏览器的步骤解析
from selenium
import webdriver
from selenium.webdriver.chrome.options
import Options
chrome_options = Options()
chrome_options.add_experimental_option(
"debuggerAddress",
"127.0.0.1:9222")
driver = webdriver.Chrome(chrome_options=chrome_options)
driver.switch_to_new_tab()
会出现报错:
'WebDriver' object has no attribute 'switch_to_window'
,只需要将切换新网页作用域语句改为:
driver.switch_to.window(driver.window_handles[-1])
即可。
三、代码案例
引入selenium
模块和其他必要的库
from airtest.core.api
import *
from airtest_selenium.proxy
import WebChrome
from selenium.webdriver.common.keys
import Keys
from selenium.webdriver.common.by
import By
from selenium.webdriver.support.ui
import WebDriverWait
from selenium.webdriver.support
import expected_conditions
as EC
from selenium.webdriver.chrome.options
import Options
from selenium
import webdriver
import threading
import time
import random
import json
#
选项,连接到已打开的Chrome
连接到已打开的Chrome
打开chrome
输入搜索关键词并提交搜索
search_box = driver.find_element(By.CLASS_NAME,
'nav-search-input')
search_box.send_keys(
'Airtest
切换界面
sleep(
3)
#
酱”主页
driver.find_element(By.XPATH,
"//*[@id=\"i_cecream\"]/div/div[2]/div[2]/div/div/div/div[2]/div/div/div/div/div/div/h2/a").click()
#
查找特定视频元素
video_ele = driver.find_element(By.XPATH,
"//div[@title='14
自动化测试小白课程
']")
#
获取所有视频列表
video_list = driver.find_elements(By.XPATH,
"//ul[@class='row video-list clearfix']//a[@class='title']")
#
切换到新打开的视频页面
driver.switch_to.window(driver.window_handles[
-
1])
#
随机播放一个视频
driver.switch_to.window(driver.window_handles[
-
1])
#
暂停播放
def
video_pause_and_play(check_btn=
False):
try:
#
暂停按钮
paus_btn = driver.find_elements(By.XPATH,
"//*[@id=\"bilibili-player\"]//div[@class='bpx-player-ctrl-btn bpx-player-ctrl-play']")
if paus_btn[
0]:
#
时间戳检测是否在播放
detection_time2 = driver.find_elements(By.XPATH,
'//*[@class="bpx-player-control-bottom-left"]//div[@class="bpx-player-ctrl-time-label"]')
end_time = detection_time2[
0].text
#
为True
暂停按钮
if start_time == end_time
or check_btn:
print(
"
暂停
)<1span ,="" 微软雅黑,="" simsun,="" sans-serif;"="" style="box-sizing: inherit; font-family: "Microsoft YaHei";">
按钮
")
paus_btn[
0].click()
except Exception
as e:
print(
f
"
暂停
)<1span ,="" 微软雅黑,="" simsun,="" sans-serif;"="" style="box-sizing: inherit; font-family: "Microsoft YaHei";">
出错
{e}
")
#<1span ,="" 微软雅黑,="" simsun,="" sans-serif;"="" style="box-sizing: inherit; font-family: "Microsoft YaHei";">发送弹幕
def
video_sms(sms_body=
"<1span ,="" 微软雅黑,="" simsun,="" sans-serif;"="" style="box-sizing: inherit; font-family: "Microsoft YaHei";">
不错
"):
try:
#
输入弹幕内容并发送
sms_input_edit.send_keys(sms_body)
sms_input_edit.send_keys(Keys.ENTER)
except Exception
as e:
print(
f
"<1span ,="" 微软雅黑,="" simsun,="" sans-serif;"="" style="box-sizing: inherit; font-family: "Microsoft YaHei";">
发弹幕出错
{e}
")
print(
f
"<1span ,="" 微软雅黑,="" simsun,="" sans-serif;"="" style="box-sizing: inherit; font-family: "Microsoft YaHei";">
发送弹幕:
{sms_body}
")
# <1span ,="" 微软雅黑,="" simsun,="" sans-serif;"="" style="box-sizing: inherit; font-family: "Microsoft YaHei";">点赞视频
def
video_love():
print(
"<1span ,="" 微软雅黑,="" simsun,="" sans-serif;"="" style="box-sizing: inherit; font-family: "Microsoft YaHei";">
点赞
")
try:
# <1span ,="" 微软雅黑,="" simsun,="" sans-serif;"="" style="box-sizing: inherit; font-family: "Microsoft YaHei";">查找点赞按钮
sms_input_edit = driver.find_elements(By.XPATH,
"//div[@class='toolbar-left-item-wrap']//div[@class='video-like video-toolbar-left-item']")
if
not sms_input_edit:
print(
"<1span ,="" 微软雅黑,="" simsun,="" sans-serif;"="" style="box-sizing: inherit; font-family: "Microsoft YaHei";">
已经点赞
")
return
# <1span ,="" 微软雅黑,="" simsun,="" sans-serif;"="" style="box-sizing: inherit; font-family: "Microsoft YaHei";">点击点赞按钮
sms_input_edit[
0].click()
except Exception
as e:
print(
f
"<1span ,="" 微软雅黑,="" simsun,="" sans-serif;"="" style="box-sizing: inherit; font-family: "Microsoft YaHei";">
点赞出错
{e}
")
# <1span ,="" 微软雅黑,="" simsun,="" sans-serif;"="" style="box-sizing: inherit; font-family: "Microsoft YaHei";">收藏视频
def
video_collect():
print(
"<1span ,="" 微软雅黑,="" simsun,="" sans-serif;"="" style="box-sizing: inherit; font-family: "Microsoft YaHei";">
收藏
")
try:
# <1span ,="" 微软雅黑,="" simsun,="" sans-serif;"="" style="box-sizing: inherit; font-family: "Microsoft YaHei";">查找收藏按钮
colle_btn = driver.find_elements(By.XPATH,
"//div[@class='toolbar-left-item-wrap']//div[@class='video-fav video-toolbar-left-item']")
if
not colle_btn:
print(
"<1span ,="" 微软雅黑,="" simsun,="" sans-serif;"="" style="box-sizing: inherit; font-family: "Microsoft YaHei";">
已经收藏
")
return
#
获取收藏夹列表
list_coll = driver.find_elements(By.XPATH,
"//div[@class='group-list']//ul/li/label")
#
滚动到选中的收藏夹元素位置
random_element = random.choice(list_coll)
#
滚动到指定元素处
driver.execute_script(
"arguments[0].scrollIntoView(true);", random_element)
sleep(
2)
random_element.click()
#
点击确认收藏按钮
driver.find_element(By.XPATH,
"//div/button[@class='btn submit-move']").click()
except Exception
as e:
print(
f
"<1span ,="" 微软雅黑,="" simsun,="" sans-serif;"="" style="box-sizing: inherit; font-family: "Microsoft YaHei";">
收藏出错
{e}
")
def
wait_for_element(driver, selector, timeout=
60 *
5):
try:
#
等待元素出现
element = WebDriverWait(driver, timeout).until(
EC.presence_of_element_located((By.XPATH, selector))
)
except Exception:
print(
"<1span ,="" 微软雅黑,="" simsun,="" sans-serif;"="" style="box-sizing: inherit; font-family: "Microsoft YaHei";">
元素未出现
")
return
None
#
启动浏览器并打开视频
start_selenium()
# <1span ,="" 微软雅黑,="" simsun,="" sans-serif;"="" style="box-sizing: inherit; font-family: "Microsoft YaHei";">等待元素出现
element = wait_for_element(driver, selem)
if element:
print(
"<1span ,="" 微软雅黑,="" simsun,="" sans-serif;"="" style="box-sizing: inherit; font-family: "Microsoft YaHei";">
检测到已经登录
")
#
刷新页面
driver.refresh()
# <1span ,="" 微软雅黑,="" simsun,="" sans-serif;"="" style="box-sizing: inherit; font-family: "Microsoft YaHei";">发送多条随机弹幕
sms_list = [
"<1span ,="" 微软雅黑,="" simsun,="" sans-serif;"="" style="box-sizing: inherit; font-family: "Microsoft YaHei";">
感觉不错,收藏了
",
"666,<1span ,="" 微软雅黑,="" simsun,="" sans-serif;"="" style="box-sizing: inherit; font-family: "Microsoft YaHei";">
这么强
",
"<1span ,="" 微软雅黑,="" simsun,="" sans-serif;"="" style="box-sizing: inherit; font-family: "Microsoft YaHei";">
自动化还得看
airtest",
"<1span ,="" 微软雅黑,="" simsun,="" sans-serif;"="" style="box-sizing: inherit; font-family: "Microsoft YaHei";">
干货呀
",
"<1span ,="" 微软雅黑,="" simsun,="" sans-serif;"="" style="box-sizing: inherit; font-family: "Microsoft YaHei";">
麦克阿瑟直呼内行
"]
for item
in sms_list:
wait_time = random.randint(
5,
10)
#
秒
time.sleep(wait_time)
video_sms(item)
#
点赞和收藏视频
for action
in [video_love, video_collect]:
action()
sleep(
3)
else:
print(
"<1span ,="" 微软雅黑,="" simsun,="" sans-serif;"="" style="box-sizing: inherit; font-family: "Microsoft YaHei";">
登录超时
")