想写个脚本,自动删除网页上的文件,总是无法登陆
本帖最后由 sjjy1813 于 2023-2-28 19:46 编辑想写个脚本,自动删除百度文库上的文件,但是在登陆这块,总是无法执行下去,cookie这块无法模拟,至于后面的功能,也没办法测试是否对了,求大神帮忙看看,到底哪里出了问题
基本思路是:
1、打开BD文库网页,通过cookie登陆账号;2、检测登陆完成后,进入创作中心,3、在创作中心页面下,进入“文档”页面;4、进入“付费”页面;5、统计每页每个网页链接下列表状态,筛选出状态为未通过、未上架的文档链接;6、通过筛选出的未通过、未上架文档的删除按键,删除该文档,每次间隔设置为7秒
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# 设置Chrome驱动路径
chrome_driver_path = "D:/chromedriver.exe"
# 创建Chrome浏览器实例
from selenium.webdriver.chrome.service import Service
service = Service(executable_path=chrome_driver_path)
driver = webdriver.Chrome(service=service)
# 利用cookie模拟登陆
driver.get("h t t p s://cuttlefish.baidu.com/")
cookie = {'name': 'BDUSS', 'value': '这里就不写了'}
driver.add_cookie(cookie)
# 进入文档页面
wait = WebDriverWait(driver, 20)
driver.get("htt p s://cuttlefish.baidu.c o m/shopmis?_wkts_=xxxxxxxxxx#/commodityManage/documentation")
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, ".ant-tabs-tab:nth-child(2)")))
driver.find_element_by_css_selector(".ant-tabs-tab:nth-child(2)").click()
# 统计每页每个网页链接下列表状态,筛选出状态为未通过、未上架的文档链接,并删除
while True:
# 获取所有文档链接
doc_links = driver.find_elements_by_css_selector(".doc-link")
for link in doc_links:
# 获取文档状态
status = link.find_element_by_css_selector(".status").text
if status == "未通过" or status == "未上架":
# 点击删除按钮
link.find_element_by_css_selector(".doc-del").click()
# 等待弹出确认窗口
wait.until(EC.alert_is_present())
# 确认删除
alert = driver.switch_to.alert
alert.accept()
# 等待7秒
time.sleep(7)
# 返回文档页面
driver.get("h t t ps ://cu ttlefish.ba idu.c o m/shopmis?_wkts_=xxxxxxxxxx#/commodityManage/documentation)
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, ".ant-tabs-tab:nth-child(2)")))
driver.find_element_by_css_selector(".ant-tabs-tab:nth-child(2)").click()
# 判断是否存在下一页
next_page = driver.find_element_by_css_selector(".ant-pagination-next")
if "ant-pagination-disabled" in next_page.get_attribute("class"):
break
# 点击下一页
next_page.click()
# 等待页面刷新
time.sleep(3)
不让发链接,里面的网址都加了空格
涉及用户登录,不太好帮 本帖最后由 isdkz 于 2023-3-1 09:43 编辑
你可能需要在添加cookie后刷新浏览器才能显示登录后的页面。
你可以使用 driver.refresh() 来刷新浏览器
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# 设置Chrome驱动路径
chrome_driver_path = "chromedriver.exe"
# 创建Chrome浏览器实例
from selenium.webdriver.chrome.service import Service
service = Service(executable_path=chrome_driver_path)
driver = webdriver.Chrome(service=service)
# 利用cookie模拟登陆
driver.get("https://cuttlefish.baidu.com/")
cookie = {'name': 'BDUSS', 'value': ''}
driver.add_cookie(cookie)
driver.refresh() # 加这个刷新一下浏览器 cookie 才会生效
# 进入文档页面
wait = WebDriverWait(driver, 20)
driver.get("https://cuttlefish.baidu.com/shopmis?_wkts_=xxxxxxxxxx#/commodityManage/documentation")
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, ".ant-tabs-tab:nth-child(2)")))
driver.find_element_by_css_selector(".ant-tabs-tab:nth-child(2)").click()
# 统计每页每个网页链接下列表状态,筛选出状态为未通过、未上架的文档链接,并删除
while True:
# 获取所有文档链接
doc_links = driver.find_elements_by_css_selector(".doc-link")
for link in doc_links:
# 获取文档状态
status = link.find_element_by_css_selector(".status").text
if status == "未通过" or status == "未上架":
# 点击删除按钮
link.find_element_by_css_selector(".doc-del").click()
# 等待弹出确认窗口
wait.until(EC.alert_is_present())
# 确认删除
alert = driver.switch_to.alert
alert.accept()
# 等待7秒
time.sleep(7)
# 返回文档页面
driver.get("https://cuttlefish.baidu.com/shopmis?_wkts_=xxxxxxxxxx#/commodityManage/documentation")
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, ".ant-tabs-tab:nth-child(2)")))
driver.find_element_by_css_selector(".ant-tabs-tab:nth-child(2)").click()
# 判断是否存在下一页
next_page = driver.find_element_by_css_selector(".ant-pagination-next")
if "ant-pagination-disabled" in next_page.get_attribute("class"):
break
# 点击下一页
next_page.click()
# 等待页面刷新
time.sleep(3) isdkz 发表于 2023-3-1 09:42
你可能需要在添加cookie后刷新浏览器才能显示登录后的页面。
你可以使用 driver.refresh() 来刷新浏览器 ...
加了driver.refresh()果然好使,登陆上了
就是剩下的代码,总是爬取不到信息,愁人 sjjy1813 发表于 2023-3-1 17:18
加了driver.refresh()果然好使,登陆上了
就是剩下的代码,总是爬取不到信息,愁人
你先确定 .ant-tabs-tab:nth-child(2) 这个元素能找得到再说吧 本帖最后由 sjjy1813 于 2023-3-7 11:36 编辑
isdkz 发表于 2023-3-1 19:20
你先确定 .ant-tabs-tab:nth-child(2) 这个元素能找得到再说吧
<table cellspacing="0" cellpadding="0" border="0" class="el-table__body" style="width: 1013px;"><colgroup><col name="el-table_3_column_9" width="516"><col name="el-table_3_column_10" width="120"><col name="el-table_3_column_12" width="120"><col name="el-table_3_column_11" width="257"></colgroup><tbody><tr class="el-table__row"><td rowspan="1" colspan="1" class="el-table_3_column_9"><div class="cell"><!----> <div data-v-01ceff70="" data-v-3cd85bb6="" class="doc-type-icon doc"></div> <span data-v-3cd85bb6="" style="cursor: pointer;">
房管局购房协议正文
</span></div></td><td rowspan="1" colspan="1" class="el-table_3_column_10 is-center table-status"><div class="cell"><span data-v-3cd85bb6="" class="dot not-pass"></span> <span data-v-3cd85bb6="" style="margin-left: 6px;">未通过</span> <i data-v-3cd85bb6="" class="el-tooltip el-icon-warning-outline" aria-describedby="el-tooltip-2112" tabindex="0"></i></div></td><td rowspan="1" colspan="1" class="el-table_3_column_12 is-center "><div class="cell">8.00</div></td><td rowspan="1" colspan="1" class="el-table_3_column_11 is-center "><div class="cell"><button data-v-3cd85bb6="" type="button" class="el-button el-tooltip el-button--default el-button--mini" aria-describedby="el-tooltip-6024" tabindex="0" style="display: none;"><!----><!----><span>
查看原因
</span></button> <button data-v-3cd85bb6="" type="button" class="el-button el-tooltip disabled-btn el-button--default el-button--mini" aria-describedby="el-tooltip-6723" tabindex="0" style="display: none;"><!----><!----><span>编辑
</span></button> <button data-v-3cd85bb6="" type="button" class="el-button el-button--default el-button--mini" style="display: none;"><!----><!----><span>编辑
</span></button> <button data-v-3cd85bb6="" type="button" class="el-button el-button--default el-button--mini"><!----><!----><span>
下载
</span></button> <button data-v-3cd85bb6="" type="button" class="el-button el-button--default el-button--mini"><!----><!----><span>删除
</span></button></div></td></tr><tr class="el-table__row"><td rowspan="1" colspan="1" class="el-table_3_column_9"><div class="cell"><!----> <div data-v-01ceff70="" data-v-3cd85bb6="" class="doc-type-icon doc"></div> <span data-v-3cd85bb6="" style="cursor: pointer;">
这里面想选出所有文件名,及其对应的状态未通过、已上架、未上架、审核中,还有文件编辑、下载、删除,然后查找出操作功能的编辑、删除、下载,接着是筛选未上架、未通过的状态文件,通过删除操作,将其删除,不知道怎么了,代码总是无法执行。
# 使用BeautifulSoup来解析页面
soup = BeautifulSoup(driver.page_source, 'html.parser')
# 查找文件名和状态
file_names = []
statuses = []
for td in soup.find_all('td', {'class': 'el-table_3_column_9'}):
file_names.append(td.find('span', {'class': 'cell'}).text.strip())
for td in soup.find_all('td', {'class': 'el-table_3_column_10 is-center table-status'}):
statuses.append(td.find('span', {'class': 'cell'}).text.strip())
# 查找编辑、下载、删除按钮
buttons = {}
for td in soup.find_all('td', {'class': 'el-table_3_column_11 is-center'}):
button_dict = {}
for button in td.find_all('button', {'class': 'el-button el-button--default el-button--mini'}):
button_text = button.find('span').text.strip()
button_dict = button
buttons = button_dict
# 筛选状态只有未上架和未通过的文件名,并使用删除按钮
for i, status in enumerate(statuses):
if status in ['未上架', '未通过']:
delete_button = buttons['删除']
delete_button.click()
# 弹出确认窗口,点击确认
driver.switch_to.alert.accept()
# 关闭webdriver
driver.quit() 最后和ChatGPT深入交流了一下,完美实现了所有的需求,不得不说,只要把需求给chatgpt说明白了,还真是强大,不但能给代码,还能查错,就是网络不给力,经常断,导致经常输出代码一半了,停止了,大量时间浪费在反复输出结果上
页:
[1]