2016-04-19 39 views
0

我正在处理一个在弹出窗口中显示CAPTCHA和其他一些东西的脚本。我正在为FireFox编写脚本。是否有可能我提供的值,并点击提交按钮脚本可以恢复操作?我猜想,某种无限循环?Python Selenium:如何让自动化脚本中的人机交互?

+1

什么样的操作?提供更多详细信息 – Andersson

+0

我认为您可以使用Selenium等待等待点击提交按钮后发生的事情,例如,加载动画或消息。 – Buaban

+0

@Andersson像访问链接等操作 – Volatil3

回答

1

您可以等待提交按钮被用户点击:

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" 
+0

抱歉,延迟响应。我受到了偏离,并且忙于其他事情。它像Charm一样工作 – Volatil3

0

我相信你问的是如果有可能让你的硒脚本暂停人类交互,不能完全自动化。

有几种方法可以做到这一点:

容易,但哈克感觉:

在你的Python脚本,把

import pdb 
pdb.set_trace() 

在要暂停对人的地步。这将导致python应用程序下降到调试器。当人类完成他们的事情时,他们可以键入c并按回车继续运行硒脚本。

略显不舒服的感觉(对人类来说更容易)。

,在您想要把暂停的点,假设用户提交的东西,你可以(在顶部有一个import time)做这样的事情:

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 

更优雅的方式被留作练习对于读者(我知道有一种方法你应该可以不必等待,但我没有用太久)

+0

通常在验证码您提交一个页面。我想知道它会起作用吗? – Volatil3

+0

好吧,这就是get_current_url.find(“captcha”)背后的想法;我应该更清楚一点:这个想法是,验证码页在URL中包含“验证码”一词[如果不是,您可以用其他指示符替换它],您一直等到当前页面不是验证码页面... – Foon

相关问题