一、操作步骤
环境:Python 3.8,selenium库
在上一章,讲述了如何对本地的浏览器操作,在此不再进行赘述
由于是练习问题,能尽量复杂,就复杂一点,故此操作步骤为下:
这样保证了本地地址是127.0.0.1:12306,且成功运行了。
在这里命令行输入的是:
D:\Application\Google\chrome.exe --remote-debugging-port=12306
前面的则是chrome的本地文件,你们可能是如下地址:
C:\Program Files\Google\Chrome\Application\chrome.exe
确保浏览器打开后,运行下面的代码,则OK了。
切记不要短时间内多次运行--------
如果想直接通过b站首页进入的话,则可以用window_bili()方法,修改一下窗口参数即可
二、代码
#导入库
from selenium import webdriver
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.webdriver import ActionChains
import time
#b站每日登录+给任意视频投两个币(一共30经验)
#说是任意,其实是每刷新的六个视频中的第一个
class Openbili(object):
def __init__(self,driver):
self.driver = driver
def window_bing(self):
# 打开bing搜索
self.driver.get("https://cn.bing.com/")
# 搜索并进入bilibili
#用显式等待,直到搜索框内输入
searwd = self.wait.until(EC.presence_of_element_located((By.ID, 'sb_form_q')))
searwd.send_keys("bilibili")
searwd.send_keys(Keys.ENTER)
def window_bili(self):
bili = self.driver.find_element_by_partial_link_text("哔哩哔哩")
actions = ActionChains(self.driver)
actions.click(bili)
actions.perform()
if not driver.get_cookies():
#30经验--需要cookies,若没有相应的账号cookies的话,这里跳转至登录
self.win_login()
#等待用户登录后再执行操作
while not driver.get_cookies():
time.sleep(1)
#随机点开一个视频
self.driver.switch_to.window(driver.window_handles[1])
video = self.driver.find_element_by_css_selector('a[data-idx="1"][target="_blank"]')
video.click()
#投币点赞
self.driver.switch_to.window(driver.window_handles[2])
time.sleep(3)
coin = self.driver.find_element_by_css_selector('span[class="coin"]')
coin.click()
ye = self.driver.find_element_by_css_selector('span[class="bi-btn"]')
ye.click()
def win_login(self):
#登录操作--通过选项卡操作哔哩哔哩,由于浏览器自动化输入会跳出人机操作,故在此推荐扫码登录,不再展示对应代码
self.driver.switch_to.window(driver.window_handles[1])
cllogin = self.driver.find_element_by_css_selector('div[class="header-login-entry"]')
cllogin.click()
def main(self):
#隐式等待
self.driver.implicitly_wait(10)
#显式等待
self.wait = WebDriverWait(self.driver, 10)
self.window_bing()
self.window_bili()
if __name__ == '__main__':
#操作通过本地地址打开的浏览器
options = Options()
options.add_experimental_option("debuggerAddress", "localhost:12306")
driver = webdriver.Chrome(options=options)
#测试对象
test = Openbili(driver)
test.main()
三、总结
上面对于哔哩哔哩的每天30经验而言,实战意义不大,仅作为学习参考,而对于浏览器自动化,其延申可针对网页抢购某样产品,但由于其可对浏览器cookies操作性能,导致会有可能出现使cookies泄露问题,浏览器自动化操作,还是慎用较好。如果有一定爬虫基础的同学,还可以尝试抓取一下投币的视频标题,简介,up主信息,在此就不再演示了。
四、更新
针对于点击事件失灵问题,我的解决方案是直接获取对应的href属性,如下
#点击事件代码:
bili = self.driver.find_element_by_partial_link_text("哔哩哔哩")
actions = ActionChains(self.driver)
actions.click(bili)
actions.perform()
#直接获取其href属性,然后直接加载url即可,但要注意这个不需要对窗口的后续操作了
bili = self.driver.find_element_by_partial_link_text("哔哩哔哩").get_attribute('href')
self.driver.get(bili)