首先,如果你正在學習硒,不要使用任何的谷歌頁面的開始。它們看起來很簡單,但在引擎蓋下非常複雜和複雜。找到另一個網站來自動化請。無論如何,這違背了Google的用戶協議。
然後,我可以爲你提供工作的代碼。注意Google搜索結果在不同的瀏覽器中可能會有所不同,並且您還需要使用WebDriverWait進行等待。
require 'selenium-webdriver'
driver = Selenium::WebDriver.for :firefox
driver.navigate.to "http://google.com"
element = driver.find_element(:name, 'q')
element.send_keys "translate"
element.submit
wait = Selenium::WebDriver::Wait.new(:timeout => 10)
wait.until {
driver.find_element(:css , 'h3 > a')
}
# click first result
# driver.find_element(:xpath , '(.//h3/a)[1]').click
results = driver.find_elements(:css , 'h3 > a')
results.each { |result|
if result.attribute('textContent') == 'Google Translate'
result.click
break
end
}
(.//h3/a)[1]
表示第一個結果。在Firefox中,搜索結果沒有唯一data-href
用於識別,因此您需要使用索引。
否則,您可以通過爲它的屬性textContent
等於Google Translate
鏈接的所有結果鏈接循環。請注意,鏈接文本實際上是Google <em>Translate</em>
,因此在XPath中使用text()
可能不起作用。
如果您發現上面的解決方案是過多服用的,它證明了你不應該擺在首位使用谷歌的網頁開始學習硒。 )
'find_Element' - >'find_element'。 Ruby區分大小寫 – ChicagoRedSox
仍然沒有運氣。感謝您的輸入。我只是在學習如何做這種東西。我已經嘗試了幾種不同的.click腳本方式,但沒有任何內容。有人告訴我一些關於谷歌背後幕後的事情,按照「Google實例」的說法,我不是100%,但這可能是問題嗎?他們表示Google試圖阻止自動化。 – user3358673