解决selenium登录小红书报网络异常问题,感觉是被检测到了,不知道怎么解决了

img


def xiaohongshu():
url='https://www.xiaohongshu.com/explore'
options = webdriver.ChromeOptions() # 创建一个选项 最终运行按照选项执行
options.add_argument('--headless') # 隐藏浏览器
driver = webdriver.Chrome()

# 禁用webdriver检测的脚本
script = 'Object.defineProperty(navigator, "webdriver", {get: () => false,});'
driver.execute_script(script)
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
"source": """
Object.defineProperty(navigator, 'webdriver', {
get: () => false
})
"""
})
driver.get(url)
time.sleep(15)

# 拉到浏览器底部
# for _ in range(5):
# driver.execute_script("window.scrollTo(0,document.body.scrollHeight)")

# time.sleep(3)
# page_source = driver.page_source
page=int(request.args.get('page',''))
#选择板块
n=1
ls=[]
list1=[]
while page>0:
try:
title=driver.find_element(f'/html/body/div[1]/div[1]/div[2]/div[2]/div/div[2]/section[{n}]/div/div/a/span').text
print(title)
path=driver.find_element(By.XPATH,f'/html/body/div[1]/div[1]/div[2]/div[2]/div/div[2]/section[{n}]/div/a[2]/@href').text
path='https://www.xiaohongshu.com'+path
print(path)
print(title,path)
dict={'title':title,'path':path}
ls.append(dict)
n+=1
except:
# driver.execute_script("window.scrollTo(0,document.body.scrollHeight)") #拉到底
driver.execute_script("window.scrollBy(0, 900);") #向下啦900像素
time.sleep(2)
page-=1
ls=[list1.append(i) for i in ls if i not in list1]
print(ls)
# driver.quit()
return ls
![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/045026126296157.png "#left")

解决方法

1、换个ip试下,比如手机热点
2、如果换热点ip可以解决的话,就弄个代理服务来自动进行切换ip。
如果换了ip还不行的话,需要考虑隐藏selenium的操作,
3、按照这个进行隐藏selenium的操作
具体可以参考stackoverflow的高赞回答:


如有问题随时沟通
如有帮助欢迎采纳

【以下回答由 GPT 生成】

回答:

小红书网站可能会使用一些反爬虫机制来检测自动化操作,导致出现网络异常的问题。为了解决这个问题,你可以尝试以下几个解决方案:

  1. 使用代理IP:
  2. 访问小红书时,使用高质量的代理IP,以降低被检测到的概率。
  3. 可以使用第三方代理IP服务,如阿布云、快代理等,通过设置代理IP的方式来访问小红书网站。

示例代码: python options.add_argument('--proxy-server=http://proxy_ip:proxy_port') # 设置代理IP,替换proxy_ip和proxy_port为实际的代理IP和端口号

  1. 隐藏WebDriver:
  2. 尝试使用其他WebDriver,如Firefox、Safari等。
  3. 在Chrome WebDriver实例化时,设置一些参数来隐藏WebDriver相关的信息,可以通过设置 ChromeOptions 来实现。

示例代码: python options.add_argument('--disable-blink-features=AutomationControlled') # 隐藏WebDriver

  1. 模拟人类操作模式:
  2. 通过模拟人类的操作模式,来降低被检测到的概率。比如增加随机的延时、不同的操作顺序等。

示例代码: python import random time.sleep(random.randint(2, 5)) # 增加随机的延时

  1. 使用Selenium Grid和多个不同的浏览器实例:
  2. Selenium Grid允许同时使用多个浏览器实例进行操作,可以通过在多个浏览器中轮流切换,来降低被检测到的概率。

示例代码: ```python from selenium import webdriver from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

capabilities = DesiredCapabilities.FIREFOX # 切换至Firefox浏览器 driver = webdriver.Remote(command_executor='http://127.0.0.1:4444/wd/hub', desired_capabilities=capabilities) ```

  1. 使用第三方工具或库来绕过检测:
  2. 一些第三方工具或库可以帮助你绕过网站的反爬虫机制,如puppeteer、playwright等。

以上是一些常见的解决方案,可以根据实际情况尝试。但需要注意的是,使用自动化工具进行爬取时,要遵守网站的使用规则,并尊重网站的权益。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

补header吧

设置一个常见的浏览器 User-Agent

from selenium.webdriver.chrome.options import Options

options = Options()
options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3")
driver = webdriver.Chrome(chrome_options=options)


参考gpt:
结合自己分析给你如下建议:
小红书网站对selenium的浏览器进行了检测,如果发现浏览器中存在webdriver属性或者其他特征,就会拒绝访问或者返回错误信息。您需要在selenium中使用一些技巧来隐藏webdriver属性或者模拟正常浏览器的行为。
小红书网站对selenium的请求频率进行了限制,如果发现请求过于频繁或者没有遵守robots协议,就会触发反爬机制或者验证码验证。您需要在selenium中设置合理的请求间隔或者使用代理IP来避免被封禁或者验证。
小红书网站对selenium的页面加载方式进行了优化,如果发现页面没有完全加载或者没有执行相关的js代码,就会导致页面元素无法定位或者点击。您需要在selenium中使用显式等待或者隐式等待来确保页面元素加载完成或者可交互。

小红书的机制问题,换个ip并加上头试下

ChatGPT: 你提到的小红书登录问题可能是因为被网站检测到了你使用了 Selenium 进行自动化操作,导致触发了反爬机制。小红书等许多网站会采取一些手段来检测和防止自动化脚本的访问,比如检测 WebDriver 属性、模拟人类行为等。

以下是一些可能的解决方案来规避被检测到的问题:

  1. 使用模拟人类行为:尽量模拟人类的操作行为,比如添加随机的等待时间、模拟鼠标点击、滚动等。这样可以减少被检测到的概率。

  2. 更改请求头信息:通过设置不同的 User-Agent、Referer 等请求头信息,模拟不同的浏览器和设备,减少被检测到的可能性。

  3. 使用代理IP:使用代理IP来隐藏你的真实IP地址,从不同的IP地址进行访问,降低被检测到的可能性。

  4. 使用 Selenium Grid 或 WebDriver Manager:这些工具可以管理多个 WebDriver 实例,同时通过设置不同的配置来模拟不同的浏览器和设备,增加隐匿性。

  5. 遵守网站的使用规则:在爬取网站数据时,遵循网站的使用规则和协议,避免过于频繁的请求和访问。

  6. 使用浏览器的开发者工具:通过浏览器的开发者工具查看网络请求、请求头和响应,模拟人工操作时的数据交互,更好地模拟真实的访问。

  7. 考虑使用 API:如果小红书提供 API 接口来获取数据,可以尝试使用官方提供的 API 来避免被检测到的问题。

最重要的是,要始终注意遵守网站的规则和使用政策,避免过度频繁的请求和访问,以确保你的爬虫行为是合法合规的。同时,网站的反爬机制也可能不断更新,所以需要不断尝试不同的方法来适应变化。

Selenium最常见异常分析及解决方案!
可以参考下


selenium常见异常以及处理方法_selenium报错_卢同学.的博客-CSDN博客 selenium常见异常以及处理方法python常见异常以及处理方法.一、 TypeError: ‘module’ object is not callable二、“chromedriver” executable needs to be in path三、selenium 点击元素报错 ElementClick四、selenium 使用 clear 无法清除文本框内容WEB自动化_键盘事件五、下拉框是 input 封装的,无法操作..._selenium报错 https://blog.csdn.net/weixin_44801980/article/details/125455731

先使用 selenium的chrom插件试试
看看是那一步出的问题
然后把脚本导出后作对应的参数化及分装

img

img

img

爬取代理池进行随机ip代理设置,分页乱序,sleep的时间长一点

加个cookie看看。或者使用undetected_chromedriver

参考gpt

  1. 更换User-Agent:尝试更改浏览器的User-Agent,使其看起来更像是正常的浏览器请求。可以通过options.add_argument('--user-agent=YOUR_USER_AGENT')来设置User-Agent。

  2. 使用代理:使用代理服务器可以隐藏您的真实IP地址,并模拟正常的用户请求。您可以尝试使用代理服务器来发送请求,以避免被检测到。

  3. 增加延迟:在发送请求之前增加一些延迟,模拟人类的操作。可以使用time.sleep()函数来添加延迟。

  4. 使用其他浏览器:尝试使用其他浏览器,如Firefox或Edge,而不是Chrome。有时候,不同的浏览器对自动化工具的检测程度不同。

  5. 使用Selenium的WebDriverWait:使用WebDriverWait来等待页面加载完全,以确保页面加载完成后再进行操作。可以使用WebDriverWait(driver, timeout).until(EC.presence_of_element_located((By.XPATH, 'YOUR_XPATH')))来等待元素的出现。

  6. 避免使用隐藏的选项:尽量避免使用--headless等隐藏浏览器的选项,因为这可能会引起被检测到的风险。

难度很大,因为你的访问太规律了,你要再模拟下人的浏览习惯