初识Python系列(二)

对于Python selenium操作的总结(二)

–小破站每日登录投币30经验实战练习

一、操作步骤

环境:Python 3.8,selenium库

在上一章中,我描述了如何操纵本地浏览器,所以在这里不再重复。

[En]

In the previous chapter, I described how to manipulate local browsers, so I won’t repeat them here.

由于这是一个实践问题,它可以尽可能地复杂,因此步骤如下:

[En]

As it is a matter of practice, it can be as complicated as possible, so the steps are as follows:

首先运行本地浏览器:

初识Python系列(二)

这样保证了本地地址是127.0.0.1:12306,且成功运行了。

在这里命令行输入的是:

D:\Application\Google\chrome.exe --remote-debugging-port=12306

前面的则是chrome的本地文件,你们可能是如下地址:

C:\Program Files\Google\Chrome\Application\chrome.exe

确保浏览器打开后,运行下面的代码,则OK了。
记住不要在短时间内跑多次-

[En]

Remember not to run multiple times in a short period of time-

如果想直接通过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)

Original: https://www.cnblogs.com/cedardaily/p/15834679.html
Author: 柏木的白
Title: 初识Python系列(二)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/510158/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球