鱼C论坛

 找回密码
 立即注册
查看: 1699|回复: 6

[已解决]想写个脚本,自动删除网页上的文件,总是无法登陆

[复制链接]
发表于 2023-2-28 19:41:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 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("h  t  t 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)

不让发链接,里面的网址都加了空格
最佳答案
2023-3-1 09:42:22
本帖最后由 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)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-3-1 09:25:50 From FishC Mobile | 显示全部楼层
涉及用户登录,不太好帮
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-1 09:42:22 | 显示全部楼层    本楼为最佳答案   
本帖最后由 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)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2023-3-1 17:18:01 | 显示全部楼层
isdkz 发表于 2023-3-1 09:42
你可能需要在添加cookie后刷新浏览器才能显示登录后的页面。

你可以使用 driver.refresh() 来刷新浏览器 ...


加了driver.refresh()果然好使,登陆上了
就是剩下的代码,总是爬取不到信息,愁人
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-1 19:20:56 | 显示全部楼层
sjjy1813 发表于 2023-3-1 17:18
加了driver.refresh()果然好使,登陆上了
就是剩下的代码,总是爬取不到信息,愁人

你先确定 .ant-tabs-tab:nth-child(2) 这个元素能找得到再说吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-7 11:22:20 | 显示全部楼层
本帖最后由 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_text] = button
    buttons[td.parent.index(td)] = button_dict

# 筛选状态只有未上架和未通过的文件名,并使用删除按钮
for i, status in enumerate(statuses):
    if status in ['未上架', '未通过']:
        delete_button = buttons[i]['删除']
        delete_button.click()
        # 弹出确认窗口,点击确认
        driver.switch_to.alert.accept()

# 关闭webdriver
driver.quit()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-12 17:47:55 | 显示全部楼层
最后和ChatGPT深入交流了一下,完美实现了所有的需求,不得不说,只要把需求给chatgpt说明白了,还真是强大,不但能给代码,还能查错,就是网络不给力,经常断,导致经常输出代码一半了,停止了,大量时间浪费在反复输出结果上
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-24 07:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表