python - (Python selenium)通过 Steam 的年龄检查
问题描述
我是程序和网络抓取的新手。我想编写一个程序来访问一些最畅销的游戏并提取评论内容,但是当它尝试访问 M 级游戏时,我的程序只是被重定向到年龄检查页面。因此,我使用 selenium 单击一些按钮,以便通过年龄检查。
这是一个例子:
IDlist = ['730','1085660']
chrome = webdriver.Chrome('./chromedriver')
for i in IDlist:
url = 'https://steamcommunity.com/app/%s/reviews/?l=english&browsefilter=toprated&snr=1_5_100010_' %i
chrome.get(url)
#the age check page
chrome.find_element_by_css_selector('#ViewAllForApp').click()
chrome.find_element_by_css_selector('#age_gate_btn_continue').click()
for x in range(1,5):
chrome.execute_script('window.scrollTo(0,document.body.scrollHeight);')
time.sleep(2)
soup = BeautifulSoup(chrome.page_source, 'html.parser')
.
.
.
第一个游戏(ID = 730)可以工作,但问题是当我访问第二个游戏(ID = 1085660)时,它没有年龄检查页面和以下错误消息,如下所示:
NoSuchElementException: no such element: Unable to locate element: {"method":"css selector","selector":"#ViewAllForApp"}
(Session info: chrome=87.0.4280.88)
我怎样才能避免这个问题?if-else
? 或者尝试其他方法来通过年龄检查?(例如 add cookies
)
解决方案
查看 Steam 的年龄检查,您应该可以设置 cookie
lastagecheckage
到; 1-0-1900
_path=/
birthtime
到; -2211667760
_path=/
和
wants_mature_content
到1
应用程序的路径,或 /
在访问商店页面之前,或者在初始化您正在使用的任何 HTTP 库时,有效地绕过年龄检查重定向。
不要忽视路径,它们很重要。不设置它们可能会导致您进入无限重定向循环。
用于检测:
document.cookie = "wants_mature_content=1";
document.cookie = "lastagecheckage=1-0-1900; path=/";
document.cookie = "birthtime=-2211667760; path=/";
例如,在浏览器的 JavaScript 控制台中https://store.steampowered.com/app/271590/
(GTA V)
您可以通过进入隐身模式并查看应用程序中的 cookie 或调试环境中受年龄限制的标题上的网络选项卡来试验lastagecheckage
和cookie。birthtime
不过,这些应该可以工作。
推荐阅读
- javascript - 如何在 redux 中间件中调度一个动作?
- c# - 在 IIS 下运行时无法连接到 Elasticsearch(访问密钥和秘密不被尊重)
- apache-kafka - td-agent fluentd 无法向 Kafka 发送消息
- html - 我想根据用户的输入显示结果而不重新加载页面!(对于 html 中的 Wordpress 网页设计?)
- javascript - 在javascript中更改图表高度和宽度属性
- gcc - 如何在 gcc 内联汇编中引用 r8-r15 寄存器?
- c# - 停止 ADK/DLL 写入控制台
- python-3.x - Tensorflow 神经网络:我的模型每次都给出 1.0 的准确度
- c# - UWP 中的 Xamarin Forms MasterDetailPage 按钮填充问题
- c++ - 在 Rcpp 中使用多参数目标函数调用 numDeriv:hessian()