from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# load the page
driver.get("https://www.google.com/recaptcha/api2/demo")
# get the submit button
bt_submit = driver.find_element_by_css_selector("[type=submit]")
# wait for the user to click the submit button (check every 1s with a 1000s timeout)
WebDriverWait(driver, timeout=1000, poll_frequency=1) \
.until(EC.staleness_of(bt_submit))
print "submitted"
for _ in xrange(100): # or loop forever, but this will allow it to timeout if the user falls asleep or whatever
if driver.get_current_url.find("captcha") == -1:
break
time.sleep(6) # wait 6 seconds which means the user has 10 minutes before timeout occurs
3条答案
按热度按时间e0uiprwp1#
您可以等待用户单击提交按钮:
xdnvmnnf2#
我相信你想问的是,是否有可能让你的 selenium 脚本暂停人类互动,不能完全自动化。
有几种方法可以做到这一点:
轻松但粗糙的感觉:
在python脚本中,将
在你想为人类暂停的地方,这会导致python应用程序进入调试器,当人类完成他们的任务后,他们可以输入c并按回车键继续运行selenium脚本。
稍微少一些粗糙的感觉(对人来说更容易)。
假设用户提交了一些东西,在你想要暂停的地方,你可以这样做(顶部有一个
import time
):更优雅的方法留给读者作为练习(我知道有一种方法您应该能够不必忙着等待,但我已经很久没有使用它了)
dy1byipe3#
一种方法是检查输入验证码后加载的下一个页面的某些内容,并等待直到找到它们;另一种方法是检查当前URL直到它发生变化(通常是输入验证码后URL发生变化)或等待下一个URL-