2023最新详细:使用selenium携带cookie登录QQ空间,爬取指定好友空间说说照片

写在前面:最近学了爬虫,正好爬取一下指定好友的所有空间说说照片,之前使用selenium账号密码登录,模拟登录次数过多,会加验证码,甚至导致QQ冻结,所以采用cookie登录


思路

首先获取cookie,使用cookie登陆之后通过空间好友栏搜索指定好友,并进入好友空间,从而爬取说说照片,注意说说分纯文字,(文字+)图片,(文字+)链接,(文字+)视频,因为首次默认加载空间说说数量限制,通过模拟屏幕滑动加载所有说说,再通过xpath定位处理,解析出图片src,进而下载持久化存储。

导入所需包

from selenium import webdriver
from time import sleep
from lxml import etree
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
import os
import requests
import re
import json

登录QQ空间

1.获取cookie

安装Google插件EditThisCookie

 导出cookie

拿到cookie,节选如下,要修改一下cookie 

{
    "domain": ".qzone.qq.com", #均修改为 "domain": ".qq.com",不然出现域名不匹配问题
    "hostOnly": false,
    "httpOnly": false,
    "name": "zzpaneluin",
    "path": "/",
    #  "sameSite": "unspecified", 注释这行方式或者设置属性值为None
    "secure": false,
    "session": true,
    "storeId": "0",
    "value": "",
    "id": 19
},


 2.携带cookie登录
url = 'https://qzone.qq.com/'
search_name = input('请输入好友姓名')
# 粘贴通过EditThisCookie获取的页面cookie信息
cookies = [ ]
chrome_options = Options()
# 不显示页面
# chrome_options.add_argument('--headless')
# chrome_options.add_argument('--disable-gpu')
# 反自动检测
chrome_options.add_experimental_option('excludeSwitches', ['enable-automation'])
# 创建一个Service对象,指定ChromeDriver的路径
service = Service('E:/appData/webCrawlerStu/C7.selenium/chromedriver.exe')
# 通过Service对象来初始化Chrome WebDriver
driver = webdriver.Chrome(service=service, options=chrome_options)
driver.get(url)
sleep(3)

# 通过add_cookie方法添加cookie
for cookie in cookies:
    driver.add_cookie(cookie)

sleep(3)
driver.refresh()    # 刷新页面验证是否登录成功

进入好友空间

# 获取所有窗口句柄。句柄的顺序:先出现的先加入列表。最后出现的,最后加入列表。
wins = driver.window_handles
# 切换到最新打开的窗口
driver.switch_to.window(wins[-1])
driver.maximize_window()
# 进入好友空间
driver.implicitly_wait(5)  # 隐示等待,为了等待充分加载好网址,全局的
driver.find_element('id', 'tab_menu_care').click()
driver.find_element('id', 'aMyFriends').click()
driver.find_element('id', 'friend_search_input').send_keys(search_name)
driver.find_element('xpath', '//*[@id="friends-drop-down"]/div[2]/div/div/div[1]/div[1]/button').click()
driver.find_element('xpath', '//*[@id="search_friend_result"]/li/a').click()

wins = driver.window_handles
driver.switch_to.window(wins[-1])
# 点击我知道了
driver.find_element('xpath', '//*[@id="friendship_promote_layer"]/table/tbody/tr[1]/td[2]/a').click()

 滚动屏幕加载所有说说

def scroll_to_bottom(driver):
    # 设置初始滚动位置
    scroll_position = 0
    # 不断向下滑动直到见底
    while True:
        # 向下滚动一屏的高度
        driver.execute_script(
            f"window.scrollTo(0, {scroll_position + driver.execute_script('return window.innerHeight;')});")

        # 等待一段时间,让页面加载
        sleep(1.5)  # 可以根据实际情况调整等待时间
        # 更新滚动位置
        new_scroll_position = driver.execute_script("return window.pageYOffset;")
        if new_scroll_position == scroll_position:
            # 如果滚动位置没有发生变化,说明已经到达底部,退出循环
            break
        # 更新滚动位置
        scroll_position = new_scroll_position

scroll_to_bottom(driver)
print('屏幕滑动到底!')

说说数据解析获取图片src

# 转化到iframe
driver.switch_to.frame('QM_Feeds_Iframe')
with open('./porfile.html', 'w', encoding='utf-8') as fp:
    fp.write(driver.page_source)
sleep(5)

# 获取说说图片链接
imgsDownloadList = []
tree = etree.HTML(driver.page_source)
lis = tree.xpath('//ul[@id="host_home_feeds"]/li')
for li in lis:
    # 去除多余空格
    date = li.xpath('./div[1]/div[@class="user-info"]/div[@class="info-detail"]/span/text()')[0]
    post_date = re.sub(r"\s+", "", date).replace(':', '时') + '秒'
    a_list = li.xpath('./div[2]/div[1]/div[2]/div[1]/div[1]//a')
    # 防止纯文本
    if not a_list:
        continue
    for ref, a in enumerate(a_list, start=1):
        # 因为说说视频和图片a标下img标
        # 纯文字,(文字+) 视频 , (文字+) 图片
        img_src_list = a.xpath('.//img/@src')
        if img_src_list:
            img_src = img_src_list[0]
        else:
            # 说说类型为分享链接 ,处理找不到元素的情况
            continue
        img_name = f"{post_date}_{ref}.jpg"
        img_profile = {
            'img_name': img_name,
            'img_src': img_src
        }
        imgsDownloadList.append(img_profile)

持久化存储

# 持久化存储包含字典对象的列表
my_list = [{"name": "John", "age": 30}, {"name": "Alice", "age": 25}]
with open("./data.json", "w") as fp:
    json.dump(imgsDownloadList, fp)

# 持久化存储
# UA伪装
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36'
}

location = './QzoneOf' + search_name
if not os.path.exists(location):
    os.mkdir(location)

for image in imgsDownloadList:
    source = requests.get(url=image['img_src'], headers=headers).content
    filename = location + '/' +  image['img_name']
    with open(filename, 'wb') as fp:
        fp.write(source)

sleep(2)
driver.quit()

ps:图片名称以时间+序列号命名,最后还可以使用线程池处理下载图片,如有问题希望指正...

  • 4
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
### 回答1: Selenium是一个流行的自动化测试工具,它可以模拟用户在Web浏览器中的行为。如果想要使用Selenium登录天眼查并携带cookie,可以按照以下步骤进行操作: 1. 首先,安装好Selenium库并配置好浏览器驱动(如ChromeDriver)。 2. 导入必要的库和模块,如selenium和time。 3. 创建一个浏览器实例,例如使用ChromeDriver: ``` from selenium import webdriver driver = webdriver.Chrome() ``` 4. 打开天眼查的登录页面: ``` driver.get('https://www.tianyancha.com/login') ``` 5. 找到登录页面上的用户名和密码输入框,使用driver的`find_element_by_`方法找到对应的元素,并输入用户名和密码: ``` driver.find_element_by_name('a').send_keys('your_username') driver.find_element_by_name('b').send_keys('your_password') ``` 6. 找到登录按钮并点击进行登录: ``` driver.find_element_by_css_selector('button.loginbtn').click() ``` 7. 登录成功后,可以获取当前页面的cookie: ``` cookies = driver.get_cookies() ``` 8. 将cookie保存下来,以便后续使用。可以将cookie保存在文件中,也可以直接使用。 以上就是使用Selenium携带cookie登录天眼查的基本步骤。可以根据实际情况进行适当的调整和优化。请注意,在使用Selenium进行自动化操作时,应遵守相关网站的使用规则和条款,以确保合法合规。 ### 回答2: 使用Selenium携带cookie登录天眼查可以通过以下步骤完成: 1. 首先,要确保已经安装了Selenium和浏览器驱动程序(如ChromeDriver)。 2. 启动浏览器并打开天眼查的登录页面。 3. 通过Selenium的`driver.get_cookies()`方法获取当前页面的所有cookie。 4. 创建一个新的Selenium会话,并使用`driver.add_cookie(cookie_dict)`方法将获取到的cookie添加到会话中。其中,`cookie_dict`是一个字典,包含cookie的键值对。 5. 使用`driver.refresh()`刷新页面,以确保cookie生效。 6. 接下来,您可以在浏览器中访问已登录的天眼查页面,或者执行其他需要登录状态的操作。 以下是一个简单示例代码,演示了如何使用Selenium携带cookie登录天眼查: ```python from selenium import webdriver # 启动浏览器并打开登录页面 driver = webdriver.Chrome() driver.get('https://www.tianyancha.com/login') # 获取当前页面的所有cookie cookies = driver.get_cookies() # 创建一个新的Selenium会话,并添加cookie new_driver = webdriver.Chrome() for cookie in cookies: new_driver.add_cookie(cookie) # 刷新页面以应用cookie new_driver.refresh() # 可以在new_driver中继续执行需要登录状态的操作 # 比如访问已登录的天眼查页面 new_driver.get('https://www.tianyancha.com') # 关闭浏览器 driver.quit() new_driver.quit() ``` 以上步骤可以帮助您使用Selenium携带cookie登录天眼查,并在登录状态下执行相关操作。请注意,由于天眼查的网站可能会进行更新和改变,代码的功能和稳定性可能会受到影响。 ### 回答3: selenium是一个流行的自动化测试工具,它可以模拟用户在浏览器中的操作。使用selenium携带cookie登录天眼查,需要以下步骤: 1. 首先,打开浏览器并导航到天眼查的登录页面。 2. 使用selenium的WebDriver对象获取浏览器的所有cookie信息。 3. 创建一个新的WebDriver对象,然后通过add_cookie()方法将获取的cookie信息添加到新的WebDriver对象中。 4. 导航到天眼查的主页或其他需要登录的页面,新的WebDriver对象将携带cookie信息访问。 以下是一个简单的示例代码: ``` from selenium import webdriver # 创建WebDriver对象 driver = webdriver.Chrome() # 导航到天眼查的登录页面 driver.get("https://www.tianyancha.com/login") # 获取浏览器的所有cookie信息 cookie_list = driver.get_cookies() # 创建一个新的WebDriver对象 new_driver = webdriver.Chrome() # 添加cookie信息到新的WebDriver对象 for cookie in cookie_list: new_driver.add_cookie(cookie) # 导航到天眼查的主页或其他需要登录的页面 new_driver.get("https://www.tianyancha.com") # 现在新的WebDriver对象将携带cookie信息访问天眼查 ``` 通过上述步骤,我们可以使用selenium携带cookie登录天眼查。当我们导航到其他页面时,新的WebDriver对象将自动携带cookie信息,实现自动登录。注意,需要根据实际情况,选择正确的WebDriver对象和浏览器驱动。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

敲码的小陈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值