如何将WPS在线编辑表格的内容以爬虫的方式逐一保存到本地

思路

  1. 通过webdriver方式登陆以便相对简单地绕过真人检查机制
  2. 保存cookies
  3. 通过requests模块将内容获取逐一爬取保存到本地data.csv

遇到的问题

  1. 使用webdriver.get_cookies()保存的cookies信息不会转换到requests使用
  2. 审核模式无法审查到表格内容,疑似每过一段时间发送一个post进行提交同步

代码

part Ⅰ:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
import time


url = 'https://www.kdocs.cn/p/111373373834?from=docs&source=docsWeb'

'''
金山文档登陆
'''
def login():
    driver = webdriver.Chrome()

    #窗口最大
    driver.maximize_window()
    driver.get(url=url)

    #访问后等待4秒
    time.sleep(4)

    #执行一个'点击登陆'事件
    driver.find_element_by_css_selector('.btn-allow').click()
    time.sleep(3)

    # #勾选阅读协议
    # driver.find_element_by_css_selector('.loginProtocal').click()

    #选择更多登陆选项
    driver.find_element_by_css_selector('.more > span:nth-child(1)').click()

    #同意隐私协议
    driver.find_element_by_css_selector('.dialog-footer-ok').click()

    #选择账号密码登陆
    driver.find_element_by_css_selector('#account > span:nth-child(2)').click()

    #填入账号密码
    driver.find_element_by_css_selector('#email').send_keys('************')
    driver.find_element_by_css_selector('#password').send_keys('*************..')

    #点击智能证按钮
    ActionChains(driver).move_by_offset(740, 365).click().perform()  # 鼠标左键点击, 740为x坐标, 365为y坐标。绕过智能认证检查,更换成点击坐标轴
    # ActionChains(driver).move_by_offset(740, 365).context_click().perform()  # 鼠标右键点击
    time.sleep(3)

    #点击立即登陆
    driver.find_element(By.CSS_SELECTOR, '#login').click()

    # time.sleep(5)
    # driver.quit()
最佳答案

1.可以使用下面的方法将cookie保存提供给requests中使用

from requests.cookies import RequestsCookieJar
# 获取cookie
cookie_list = driver.get_cookies()
# 创建一个RequestsCookieJar对象
cookies = RequestsCookieJar()
# 将获取的cookie赋值给cookies对象
for cookie in cookie_list:
    cookies.set(cookie['name'], cookie['value'])
requests.post(url=url,cookies=cookies)

2.表格中的内容可以通过抓包工具(chrome可以通过F12下的NetWork)寻找内容所请求的对应URL

2年前 评论
讨论数量: 5

1.可以使用下面的方法将cookie保存提供给requests中使用

from requests.cookies import RequestsCookieJar
# 获取cookie
cookie_list = driver.get_cookies()
# 创建一个RequestsCookieJar对象
cookies = RequestsCookieJar()
# 将获取的cookie赋值给cookies对象
for cookie in cookie_list:
    cookies.set(cookie['name'], cookie['value'])
requests.post(url=url,cookies=cookies)

2.表格中的内容可以通过抓包工具(chrome可以通过F12下的NetWork)寻找内容所请求的对应URL

2年前 评论
  • 感谢指导 :+1:,现在可以拿到cookie值了访问了。表格数据还是没有办法拿到。
2年前 评论

表格里的内容可能是ajax请求得到的,你用requests来做的话得找到真正的请求URL才行,你可以看看我之前写的爬虫文章,里面有思路分析。

2年前 评论
chxlD 1年前

Selenium 可以参考一下我之前写的项目

github.com/dmf-code/titans/wiki

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!