- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正尝试在 Python 中使用 Selenium 从 https://www.seekingalpha.com 中提取一些数据.首页有一个“登录/立即加入”链接。我使用 Selenium 单击它,弹出窗口要求使用另一个“登录”按钮提供登录信息。似乎我下面的代码可以输入我的用户名和密码,但我尝试点击“登录”按钮没有得到正确的响应(它点击了弹出框下方的广告。)
我正在使用 Python 3.5。
这是我的代码:
driver = webdriver.Chrome()
url = "https://seekingalpha.com"
driver.get(url)
sleep(5)
driver.find_element_by_xpath('//*[@id ="sign-in"]').click()
sleep(5)
driver.find_element_by_xpath('//*[@id ="authentication_login_email"]').send_keys("xxxx@gmail.com")
driver.find_element_by_xpath('//*[@id ="authentication_login_password"]').send_keys("xxxxxxxxx")
driver.find_element_by_xpath('//*[@id="log-btn"]').click()
非常感谢任何意见/建议。
最佳答案
编辑:之前的“答案”是错误的,所以我已经更新了它。
明白了,伙计,这就是你需要做的:
1.) 获取最新的 firefox
2.) 获取最新的 geckodriver
3.) 使用火狐驱动
driver = webdriver.Firefox(executable_path=r'd:\Python_projects\geckodriver.exe')
url = "https://seekingalpha.com"
driver.get(url)
sign_in = driver.find_element_by_xpath('//*[@id ="sign-in"]')
driver.execute_script('arguments[0].click()', sign_in)
time.sleep(1)
email = driver.find_element_by_xpath('//*[@id ="authentication_login_email"]')
email.send_keys("xxxx@gmail.com")
pw = driver.find_element_by_xpath('//*[@id ="authentication_login_password"]')
pw.send_keys("xxxxxxxxx")
pw.send_keys(Keys.ENTER)
解释:
浏览器是否使用selenium很容易检测tells that information (而且这个页面似乎不想被抓取):
The webdriver read-only property of the navigator interface indicates whether the user agent is controlled by automation.
我一直在寻找如何绕过检测的答案并找到了 this文章。
Your best of avoiding detection when using Selenium would require you to use one of the latest builds of Firefox which don’t appear to give off any obvious sign that you are using Firefox.
试一试,启动后加载了正确的页面设计,登录尝试的结果与手动尝试相同。
还通过更多搜索发现 if you modify your chromedriver ,即使使用 chromedriver,您也有机会绕过检测。
今天也学到了一些新东西。\o/
一个额外的想法:
我使用嵌入式 Chrome (CEF) 做了一个小实验。如果您通过 selenium 打开 chrome 窗口并打开控制台并检查 navigator.webdriver
,结果将为 True
。但是,如果您打开 CEF 窗口然后对其进行远程调试,则该标志将为 False
。我没有用它检查边缘情况,但非边缘情况场景应该可以使用 CEF。
那么您以后可能想查看的内容:
1.) 在命令行中:pip install cefpython3
2.) git clone https://github.com/cztomczak/cefpython.git
3.) 打开您的 CEF 项目并在示例中找到 hello.py
4.) 将启动更新为 cef.Initialize(settings={"remote_debugging_port":9222})
5.) 运行 hello.py
(这是初始的一次性设置,您可以在将来自定义它,但主要的事情已经完成,您有一个打开了调试端口的浏览器)
6.) 将 chrome 启动修改为:
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.debugger_address = "127.0.0.1:9222"
driver = webdriver.Chrome(chrome_options=chrome_options, executable_path=chrome_driver_executable)
7.) 现在您的驱动程序在浏览器中没有“自动”签名。可能会有一些缺点,例如:
window.Notification
不是 CEF 中的东西关于python - 如何使用 Selenium 单击弹出模式框中的按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57777773/
我在选项卡中有我的网络应用程序的选项。 aaa bbb ccc ddd eee 当用户单击任何选项卡(在同一窗口中)时,我会使用此代码获得淡出效果,然后自动
如何获得一个简单的调用单击来实现如下功能:http://jsfiddle.net/ftwPS/6/我显然错过了一些基本的东西,因为当您单击“CLICK”时这不起作用。 $('tr').click(fu
我有一个列表,在左侧显示一个插入符号图标,单击它时应该更改图标。每当我单击一个图标时,所有图标都会更改。 detailedInfo = []; subordinateInfo; openSu
我有一个 div,我想对其进行设置,以便当我单击其他内容时,它会隐藏该 div。 我也是这样 $('body').click(function(){ if(loginOpened) {
我有很多装有不同内容的盒子。 如果单击第一个框,您可以看到一个包含更多详细信息的弹出框。如果单击第二个、第三个等框,您必须查看这些框的详细信息。 我的问题:如果我点击框号。 2 我看到了盒子号的详细信
当我点击 .add-btn 时,我将 .add-btn 的样式更改为 background:#cccccc 并将 val() 更改为“-”。 现在当我用 tr td .list 删除添加的文本时,它是
感谢 SO 的出色贡献者!当您开始了解 jQuery 时,它会变得更酷。 :) 所以我有一个 LI,单击时会显示/隐藏子 UL。我想做的是能够单击 LI 内的链接,打开一个空白窗口,但也不会关闭子 U
我有这份文档,它使我能够获得一份带有点击进度的多项选择选择调查问卷。 如何用图像代替此处的文字? (并且仍然有这样的机制,一旦单击[图像],就会提出下一个问题) 我已经尝试使用 UL/H1 设置背景图
我想在 JQGrid 的刷新按钮单击上编写代码。有什么事件吗? 最佳答案 如果您需要在开始刷新之前执行一些操作,您应该使用 beforeRefresh打回来: $("#grid_id").jqGrid
问题是将对象或多个参数从模板传递到组件,并使用它们将数据添加到 API。 任务.service.ts addTasks(task: Task): Observable{ let headers =
我有一个像这样的primefaces选项卡 View : This tab has static content. this t
我在 jquery 中有一个有效的 a.click() 函数...但是如果我单击一个 anchor ,我会打开一个新窗口...但是我怎样才能阻止浏览器本身打开一个新窗口? 示例: $('a')
有没有简单的方法来创建代码:如果 URL 更改或单击链接显示 div(例如加载 gif 3 秒),则显示页面?有点像空白的白色页面,加载 gif 旋转 3 秒然后显示页面? 谢谢! 最佳答案 给定 G
我需要知道此时按钮的状态是否被点击? 谢谢 最佳答案 if (myButton.state & UIControlStateHighlighted) { // Do your stuff the
我正在 NSImageView 上绘制一条 NSBezierPath 线。我正在创建 NSBezierPath 对象,设置 moveToPoint,设置 lineToPoint,设置 setLineW
我的 Selenium 代码存在问题,无法正确执行按键 + 单击操作。 测试应打开 jqueryui.com 链接并选择页面上的前 2 个 li 元素。 我正在使用 Selenium 2.23 和 F
单击时我将更改字符串一部分的样式。例如“TEXT”,然后单击“T”,之后它会将样式从黑色更改为红色,仅 T在我的代码中,当我单击文本时,我拆分文本并保留在“split”数组中,它将调用handleCl
我在网站上有一个 anchor 。当有人点击它时,我在 jquery 中执行一些操作并更改名称,但是当再次单击它时,事件被触发,尽管我已经更改了它的名称。代码在这里: $(".like_cont a[
我有一个下载链接Download我希望每次当有人点击“下载”时,我都可以将其插入数据库total_downloads+1。为了插入数据库,我通常使用 然后 if (isset($_POST['d
我是一名优秀的程序员,十分优秀!