一、背景

  • 最近再csdn上写文章才发现17年7月之前没绑定手机号,账号被盗,上面发布了很多垃圾广告,想删除才发现CSDN的回收站没有批量删除功能,只能一条一条的删,甚是麻烦,于是利用python中的selenium库编写个脚本实现批量删除。

屏幕截图 2021-03-02 155951.png

二、实现过程

1.chrome的webdriver安装

  • URL:http://npm.taobao.org/mirrors/chromedriver/
  • 打开链接,找到自己chrome对于版本的chromedriver
  • 下载后解压至任意目录即可

    2.安装selenium库

    1. pip install selenium

    3.具体实现

  • 导入如下三个库,webdriver实现网页的点击操作;sleep用于等待,避免网速慢时操作跟不上,从而找不到元素;ActionChains主要用于模拟鼠标悬停再删除菜单上

    1. from selenium import webdriver
    2. from time import sleep
    3. from selenium.webdriver import ActionChains
  • 创建webdriver对象,打开目标网站

    1. # 创建webdriver对象
    2. wd = webdriver.Chrome(
    3. r'D:\ProgramFiles\chromedriver_88_4324_96\chromedriver.exe')
    4. # 调用get方法,打开网址
    5. wd.get('https://mp.csdn.net/console/article')
    6. sleep(1)
  • 模拟登录,思路很简单,按照实际登录过程,一步步找到自己点击元素的位置即可

  • image.png

    1. # 点击账号密码
    2. wd.find_element_by_xpath(
    3. '//*[@id="app"]/div/div/div[1]/div[2]/div[5]/ul/li[2]/a').click()
    4. wd.find_element_by_id('tabOne').click() # 点击账号密码登录
    5. sleep(1)
    6. # 发送用户名
    7. wd.find_element_by_id('all').send_keys('username')
    8. # 发送登录密码
    9. wd.find_element_by_id('password-number').send_keys('password')
    10. # 点击登录按钮
    11. wd.find_element_by_xpath(
    12. '//*[@id="app"]/div/div/div[1]/div[2]/div[5]/div/div[6]/div/button').click()
    13. sleep(1)
  • 查找删除位置,根据实际点击过程一步步找到元素即可。这里的难点主要在怎样选择定位下拉菜单上。

    1. # 查找回收站
    2. wd.find_element_by_xpath('//*[@id="pills-tab"]/li[6]/span').click()
    3. sleep(1)
    4. # 查找删除按钮
    5. ems = wd.find_elements_by_class_name('el-dropdown-selfdefine')
    6. couts=len(ems)
    7. for i in range(couts):
    8. #鼠标悬停在下拉菜单上
    9. ActionChains(wd).move_to_element(ems[i]).perform()
    10. abv = wd.find_element_by_link_text('彻底删除').click()
    11. # 点击确定按钮
    12. wd.find_element_by_xpath(
    13. '/html/body/div[5]/div/div[3]/button[2]').click()

    4.完整代码

    ```python from selenium import webdriver from time import sleep from selenium.webdriver import ActionChains

try:

  1. # 创建webdriver对象
  2. wd = webdriver.Chrome(
  3. r'D:\ProgramFiles\chromedriver_88_4324_96\chromedriver.exe')
  4. # 调用get方法,打开网址
  5. wd.get('https://mp.csdn.net/console/article')
  6. sleep(1)
  7. # 点击账号密码
  8. wd.find_element_by_xpath(
  9. '//*[@id="app"]/div/div/div[1]/div[2]/div[5]/ul/li[2]/a').click()
  10. wd.find_element_by_id('tabOne').click() # 点击账号密码登录
  11. sleep(1)
  12. # 发送用户名
  13. wd.find_element_by_id('all').send_keys('username')
  14. # 发送登录密码
  15. wd.find_element_by_id('password-number').send_keys('password')
  16. # 点击登录按钮
  17. wd.find_element_by_xpath(
  18. '//*[@id="app"]/div/div/div[1]/div[2]/div[5]/div/div[6]/div/button').click()
  19. sleep(1)
  20. # 查找回收站
  21. wd.find_element_by_xpath('//*[@id="pills-tab"]/li[6]/span').click()
  22. sleep(1)
  23. # 查找删除按钮
  24. ems = wd.find_elements_by_class_name('el-dropdown-selfdefine')
  25. couts=len(ems)
  26. for i in range(couts):
  27. #鼠标悬停在下拉菜单上
  28. ActionChains(wd).move_to_element(ems[i]).perform()
  29. abv = wd.find_element_by_link_text('彻底删除').click()
  30. # 点击确定按钮
  31. wd.find_element_by_xpath(
  32. '/html/body/div[5]/div/div[3]/button[2]').click()
  33. print('删除完毕')

except Exception as ex: print(‘errorInfo’, ex) wd.quit() ```

三、小结

  • 主要难点在于悬停菜单的选取上,刚开始用select方法试了很多遍行不通;
  • 运行过程中容易找不到元素,找不到的地方添加一个sleep(1)等一会即可。