VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > temp > python入门教程 >
  • 对于Python selenium操作的总结(二)

一、操作步骤

环境:Python 3.8,selenium库

在上一章,讲述了如何对本地的浏览器操作,在此不再进行赘述

由于是练习问题,能尽量复杂,就复杂一点,故此操作步骤为下:

image

首先运行本地浏览器:

image

这样保证了本地地址是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)

 
出处:https://www.cnblogs.com/lemon-cool/p/15834679.html


相关教程