selenium 自动化 携带cookies模拟登陆哔哩哔哩并发送弹幕和评论(解决多窗口切换、规避检测、评论无法输入等问题)

获取cookies之后就可以自动登陆到哔哩哔哩,点击搜索到的视频,然后输入弹幕,发送弹幕,再点击评论,发送评论,这里有个问题就是运行几次之后发现评论直接sed_keys的话,会出现输入不进去的情况,然后再次检查网页源码,发现评论框有个ajax请求的动态加载,解决办法是先点击一下评论框,再输入评论内容就可以了

源码:

cookies获取(这里涉及窗口切换)

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2021/1/3 18:14
# @Author  : huni
# @File    : 哔哩哔哩cookies.py
# @Software: PyCharm
from selenium import webdriver
from time import sleep
import json
if __name__ == '__main__':
    driver = webdriver.Chrome(executable_path='./chromedriver.exe')
    driver.maximize_window()
    driver.get('https://www.bilibili.com/')
    sleep(6)
    # driver.switch_to.frame(driver.find_element_by_xpath('//*[@id="anony-reg-new"]/div/div[1]/iframe'))  # 切换浏览器标签定位的作用域
    driver.find_element_by_xpath('//*[@id="internationalHeader"]/div[1]/div/div[3]/div[2]/div[1]/div/span/div/span').click()
    window_list = driver.window_handles  # 获取窗口列表
    driver.switch_to.window(window_list[0])  # 切换第一个窗口
    driver.close()  # 关闭第一个窗口
    window_list = driver.window_handles  # 获取窗口列表
    driver.switch_to.window(window_list[0])  # 切换第一个窗口
    sleep(10)
    dictCookies = driver.get_cookies()  # 获取list的cookies
    jsonCookies = json.dumps(dictCookies)  # 转换成字符串保存
    with open('哔哩哔哩_cookies.txt', 'w') as f:
        f.write(jsonCookies)
    print('cookies保存成功!')

再携带cookies登录到哔哩哔哩进行一系列操作(涉及窗口切换,规避检测,评论框加载)

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2021/1/3 18:19
# @Author  : huni
# @File    : 携带cookies模拟登陆哔哩哔哩.py
# @Software: PyCharm
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from time import sleep
import json
def browser_initial():
    # chrome_options = Options()
    # chrome_options.add_argument('--headless')
    # browser = webdriver.Chrome(options=chrome_options)
    options = webdriver.ChromeOptions()
    # -- 防止被检测,旧版本用法(1):
    # chrome在79版之前用这个
    options.add_experimental_option("excludeSwitches", ["enable-automation"])
    options.add_experimental_option('useAutomationExtension', False)
    browser = webdriver.Chrome(executable_path='./chromedriver.exe',options=options)
    browser.maximize_window()
    browser.get(
        'https://www.bilibili.com/')
    return browser

def log_csdn(browser):
    with open('哔哩哔哩_cookies.txt', 'r', encoding='utf8') as f:
        listCookies = json.loads(f.read())

    # 往browser里添加cookies
    for cookie in listCookies:
        cookie_dict = {
     
            'domain': '.bilibili.com',
            'name': cookie.get('name'),
            'value': cookie.get('value'),
            "expires": '',
            'path': '/',
            'httpOnly': False,
            'HostOnly': False,
            'Secure': False
        }
        browser.add_cookie(cookie_dict)
    sleep(3)
    browser.refresh()  # 刷新网页,cookies才成功
    browser.find_element_by_xpath('//*[@id="nav_searchform"]/input').send_keys('毕导')    # 输入关键词
    browser.find_element_by_xpath('//*[@id="nav_searchform"]/div').click()      # 点击搜索
    window_list = browser.window_handles  # 获取窗口列表
    browser.switch_to.window(window_list[1])  # 切换第1窗口
    browser.find_element_by_xpath('//*[@id="all-list"]/div[1]/div[2]/ul[1]/li/div[2]/div[1]/a[1]').click()      # 点击主页
    window_list = browser.window_handles  # 获取窗口列表
    browser.switch_to.window(window_list[2])  # 切换第2窗口
    browser.find_element_by_xpath('//*[@id="page-index"]/div[1]/div[2]/div/div[1]/a[1]/img').click()    # 点击最新一期视频
    window_list = browser.window_handles  # 获取窗口列表
    browser.switch_to.window(window_list[3])  # 切换第3窗口
    sleep(12)
    browser.find_element_by_xpath('//*[@id="bilibiliPlayer"]/div[1]/div[1]/div[15]').click()  # 点击播放
    sleep(2)
    browser.find_element_by_xpath('//*[@id="bilibiliPlayer"]/div[1]/div[2]/div/div[2]/div[3]/div['
                                  '1]/input').send_keys('针不戳')  # 填写弹幕内容
    browser.find_element_by_xpath('//*[@id="bilibiliPlayer"]/div[1]/div[2]/div/div[2]/div[3]/div[2]').click()  # 点击发送弹幕
    # 执行一组js程序
    browser.execute_script('window.scrollTo(0,document.body.scrollHeight)')     # 执行一组js代码,向下滚动一屏
    sleep(5)
    tex = browser.find_element_by_tag_name('textarea')    # 定位评论框
    tex.click()     # 先点击评论框
    tex.send_keys('不错')     # 再填写评论内容
    sleep(3)
    browser.find_element_by_xpath('//*[@id="comment"]/div/div[2]/div/div[3]/div[2]/button').click()     # 点击发送评论
    sleep(3)
    browser.quit()



if __name__ == "__main__":
    browser = browser_initial()
    log_csdn(browser)

后记

大家如果觉得小编的代码有用,可以多多关注小编,
同时小编的公众号也开通了,大家可以关注下,后续进行粉丝回馈,大家一起学习python叭
selenium 自动化 携带cookies模拟登陆哔哩哔哩并发送弹幕和评论(解决多窗口切换、规避检测、评论无法输入等问题)_第1张图片
打赏小编点这里哦
selenium 自动化 携带cookies模拟登陆哔哩哔哩并发送弹幕和评论(解决多窗口切换、规避检测、评论无法输入等问题)_第2张图片

你可能感兴趣的:(selenium,定位,selenium,chrome,javascript,python)