Python Selenium:如何在自动脚本中进行人工交互?

时间:2016-04-19 17:55:08

标签: python selenium

我正在制作一个脚本,在弹出窗口中显示CAPTCHA和其他一些内容。我正在为FireFox编写脚本。是否可以提供值并按下提交按钮脚本可以恢复操作?我猜,某种无限循环?

2 个答案:

答案 0 :(得分: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"

答案 1 :(得分:0)

我相信您提出的问题是,是否可以让您的硒脚本暂停以进行无法完全自动化的人工互动。

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

容易但hacky的感觉:

在你的python脚本中,输入

 import pdb 
 pdb.set_trace()

在你想为人类暂停的那一刻。这将导致python应用程序下降到调试器。当人类完成他们的事情时,他们可以输入c并按Enter键继续运行selenium脚本。

稍微不那么hacky的感觉(对人类来说更容易)。

在您想要暂停的位置,假设用户提交了某些内容,您可以执行类似的操作(顶部有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

更优雅的方法留给读者练习(我知道那里你应该能够不必忙等待,但我还没有太长时间使用它)