2016-04-19 97 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

相關問題