from selenium import webdriver from time import sleep import pickle import os bilibili_url = 'https://www.bilibili.com/' login_url = 'https://www.bilibili.com/' targer_url = 'https://show.bilibili.com/platform/detail.html?id=73710&from=pc_ticketlist' class manzhan: def __init__(self): self.status = 0 self.login_method = 1 self.driver = webdriver.Chrome(executable_path='C:\\Users\\zplrp\\AppData\\Local\\Programs\\Python\\Python38\\chromedriver.exe') def set_cookies(self): self.driver.get(bilibili_url) print("###请点击登录###") while self.driver.find('登录') != -1: sleep(1) print("###扫码成功###") pickle.dump(self.driver.get_cookies(),open('cookies.pkl','wb')) print('###cookie保存成功###') self.driver.get(targer_url) def get_cookie(self): cookies = pickle.load(open('cookie.pkl', 'rb')) for cookie in cookies: cookie_dict = { 'domain': '.bilibili.com', 'name': cookie.get('name'), 'value': cookie.get('value') } self.driver.add_cookie(cookie_dict) print('###载入cookie###') def login(self): """登录""" if self.login_method == 0: self.driver.get(login_url) print('###开始登录###') elif self.login_method == 1: if not os.path.exists('cookies.pkl'): self.get_cookies() else: self.driver.get(targer_url) self.get_cookie() def enter_manzhan(self): print('###打开浏览器,进入B站###') self.login() self.driver.refresh() self.status = 2 print('###登录成功###') if __name__ == '__main__': man = manzhan() man.enter_manzhan
时间: 2024-04-14 08:32:06 浏览: 19
这段代码是使用Selenium自动化工具来实现对B站的登录和进入漫展页面的操作。在代码中,首先导入了必要的模块和库,然后定义了一个名为manzhan的类,该类包含了一些方法用于登录和进入漫展页面。
在初始化方法中,设置了一些初始变量,并初始化了一个Chrome浏览器的驱动。然后,定义了set_cookies方法用于获取登录后的cookie并保存到文件中。get_cookie方法用于将之前保存的cookie加载到浏览器中。login方法根据登录方式进行登录操作。enter_manzhan方法用于打开浏览器、登录并进入漫展页面。
最后,在主函数中创建了一个manzhan对象,并调用enter_manzhan方法来执行登录和进入漫展页面的操作。
请问您对这段代码有什么疑问吗?
相关问题
from selenium import webdriver path = 'msedgedriver.exe' browser = webdriver.Edge(path) url = 'https://www.baidu.com' browser.get(url
)
这段代码使用 Selenium 库来实例化一个 Edge 浏览器的 WebDriver 对象,并打开百度首页。首先,需要确保已经安装了 Edge 浏览器,并且下载了对应版本的 msedgedriver.exe 驱动程序。然后,将 msedgedriver.exe 的路径赋值给变量 path,使用 webdriver.Edge(path) 创建一个 Edge WebDriver 对象。最后,将要访问的网址赋值给变量 url,使用 browser.get(url) 方法打开该网址。
import requests from lxml import etree from selenium import webdriver from selenium.webdriver.common.by import By import os import time url = 'https://www.ivsky.com/' #目标网址 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36' } path = r'C:\Users\yangyuhuan\AppData\Local\Google\Chrome\Application\chromedriver' driver = webdriver.Chrome(executable_path=path) #申请驱动器 if not os.path.exists("./images"): os.mkdir("./images") #创建结果文件夹 for page in range(10):# 页码 url = f"https://www.ivsky.com/bizhi/index_{page}.html" driver.get(url) response = driver.page_source # 获取网页源码 html = etree.HTML(response)# 对网页结构进行解析 time.sleep(3) src_image_result=html.xpath('//div[@class="il_img"]/a/img/@src') name_image_result=html.xpath('//div[@class="il_img"]/a/img/@alt') for src,name in zip(src_image_result,name_image_result): img_url="https:"+src res3=requests.get(img_url,headers=headers).content #获取图片的二进制文件 time.sleep(3) print(f'正在下载:{name}') with open('./images/' + name + '.jpg', 'wb') as f: f.write(res3) 将这个代码改成多线程的
好的,我可以帮你将这段代码改成多线程的。你可以使用Python中的`threading`模块,下面是修改后的代码:
```
import requests
from lxml import etree
from selenium import webdriver
from selenium.webdriver.common.by import By
import os
import time
import threading
url = 'https://www.ivsky.com/' #目标网址
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'
}
path = r'C:\Users\yangyuhuan\AppData\Local\Google\Chrome\Application\chromedriver'
driver = webdriver.Chrome(executable_path=path) #申请驱动器
if not os.path.exists("./images"):
os.mkdir("./images") #创建结果文件夹
def download_image(src, name):
img_url = "https:" + src
res3 = requests.get(img_url, headers=headers).content #获取图片的二进制文件
time.sleep(3)
print(f'正在下载:{name}')
with open('./images/' + name + '.jpg', 'wb') as f:
f.write(res3)
def download_page(page):
url = f"https://www.ivsky.com/bizhi/index_{page}.html"
driver.get(url)
response = driver.page_source # 获取网页源码
html = etree.HTML(response)# 对网页结构进行解析
time.sleep(3)
src_image_result=html.xpath('//div[@class="il_img"]/a/img/@src')
name_image_result=html.xpath('//div[@class="il_img"]/a/img/@alt')
threads = []
for src,name in zip(src_image_result,name_image_result):
t = threading.Thread(target=download_image, args=(src, name))
threads.append(t)
t.start()
for thread in threads:
thread.join()
for page in range(10):# 页码
download_page(page)
driver.quit()
```
在修改后的代码中,我们将下载图片的`download_image`函数和下载每个页面的`download_page`函数分别放到不同的线程中执行。同时,我们使用线程列表`threads`来保存每个线程对象,使用`thread.join()`方法来等待所有线程执行完毕后再结束程序。