好吧,看来确实必须切换到某个窗口才能让 Selenium 单击'//*[@id="appd_wrap_close"]'
element 和我尝试了一段时间才找到一个。最终我想我偶然发现了阻止您点击该元素的原因。他们有适当的测试跟踪软件。我是这样发现的:首先,我所做的就是显而易见的,检查您试图单击的“x”元素。我试图找到该元素的任何不寻常之处,过了一会儿我注意到有一个Event
附于其上。我点击Event
在 Firefox 的 Inspector 中看到以下内容:
嗯...我原以为它会关闭它所在的盒子,但它有以下 JavaScript:
function() {
c.setCookie({
manualclose: "1"
}, "", 1), u.collapse(), window.__bfi.push(["_tracklog", "pcfloatClose", location.href + "&urlPageId=" + e + "&htmlType=" + d])
}
嗯,有u.collapse
,我猜这是折叠面板所需的所有代码。但为什么还有这些其他的东西呢?有几件事对我来说似乎很奇怪:为什么每次您单击该按钮时它都会设置一个 cookie?以及为什么叫它**manual**close
?然后我仔细一看,看到了“点击”后面的文字:_esUnionOnline/R3/float/floating_normal.min.js?20190316:2
。嗯。所以他们正在调用一个 javascript 文件。这看起来像是一个 URL。为什么他们要为那个小“x”上的鼠标单击事件而费尽心思呢?
我将鼠标悬停在它上面,果然,它向我显示了https://webresource.c-ctrip.com/ResUnionOnline/R3/float/floating_normal.min.js?20190306:2
.
我导航到该网站并找到一个包含缩小版 Javascript 的大文件。我把它通过一个反压缩器(我用过https://unminify.com/ https://unminify.com/)。就在我看到的文档顶部
document.getElementById("ab_testing_tracker") && "abTestValue_Value" != h ?
document.getElementById("ab_testing_tracker").value
ab_testing_tracker
……这听起来不太好。所以我对此进行了搜索并找到了一堆带有 id 的隐藏输入ab_testing_tracker
。在这一点上,我非常确信他们正在检测硒并且不让你点击它。在对常见的测试跟踪方法进行一些谷歌搜索后,发现除其他事项外,检查userAgent
很常见。正如您所读,Selenium 默认用户代理只是 webdriverhere https://antoinevastel.com/bot%20detection/2018/01/17/detect-chrome-headless-v2.html,所以我对此进行了搜索。果然有20条结果,都是这样的形式navigator.userAgent
,还有一些看起来像
i.test(navigator.userAgent)
然后我注意到你正在使用一个随机的、合法的 userAgent,所以他们必须有其他的方法来检测硒。我确实注意到了这个功能
function n() {
var t, n;
switch (n = e.ResponseStatus.Errors[0].ErrorCode ? e.ResponseStatus.Errors[0].ErrorCode : "") {
case "104":
t = "验证码输入超时";
break;
case "105":
t = "验证码输入错误";
break;
case "106":
t = "手机号码不正确";
break;
case "107":
t = "客户端IP不能为空";
break;
case "108":
t = "短信内容不能为空";
break;
case "109":
t = "同一号码,两分钟内最多发一次";
break;
case "110":
t = "一天内同一手机最多发两次";
break;
case "111":
t = "一天内同一IP最多发五次";
break;
default:
t = "短信发送失败,请重新发送"
}
return t
}
在他们的 javascript 中并在谷歌翻译的帮助下发现最后几个开关正在检查您是否已访问该网站一定次数。但不幸的是我无法想出一个真正的方法来解决这个问题......至少在 Firefox 中是这样。
如果您愿意在 Chrome 中进行测试,默认情况下该框会最小化(无论出于何种原因),因此您不必担心删除它。
所以,长话短说,如果你可以在 Chrome 中进行测试,你可以简单地删除以下行,而不必担心愚蠢的框。测试跟踪器可能仍然,我不知道它是如何工作的,我怀疑他们自己编写了它,因为我找不到任何使用这些“ab_test_tracking”节点的工具 - 事实上,谷歌搜索“ab_test_tracking”产生很少的结果结果大部分都是这个网站。
让我知道您的选择是什么(您是否因某种原因需要使用 Firefox?),如果您能够在 Chrome 中运行测试,请告诉我它是否有效!
编辑有关分页按钮的内容因此,我发现您尝试单击以导航到下一页的按钮也是如此 - 它有一个 onClick 事件,该事件还链接到带有测试跟踪的巨大缩小文件,所以我想这就是您的原因无法点击你的按钮,硒永远不会越过第一页。
但“下一步”按钮没有单击时调用的脚本。你should能够点击该按钮
browser.find_element_by_xpath('//*[@id="divCtripComment"]/div[4]/div/a[2]')
让我知道这是否适合您。