첫 번째로, Selenium을 배우고 있다면 먼저 Google 페이지를 사용하지 마십시오. 그들은 단순 해 보이지만 두려운 부분에서는 매우 까다 롭고 복잡합니다. 자동화 할 다른 웹 사이트를 찾으십시오. 어쨌든 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
이 없으므로 index를 사용해야합니다.
그렇지 않으면 해당 속성이 textContent
이고 값이 Google Translate
인 링크에 대한 모든 결과 링크를 반복 할 수 있습니다. 링크 텍스트는 실제로 Google <em>Translate</em>
이므로 XPath에서 text()
을 사용하면 작동하지 않을 수 있습니다.
위의 해결책이 너무 많아서 처음에는 Google 페이지를 사용하여 Selenium을 배우지 않아야한다는 것을 증명합니다. ;)
'find_Element' ->'find_element'. 루비는 대소 문자를 구별합니다. – ChicagoRedSox
아직 운이 없습니다. 그래도 입력 주셔서 감사합니다. 나는 이런 종류의 일을하는 법을 배우는 중이다. 나는 .click 스크립트와 몇 가지 다른 방법을 시도했지만 아무 것도하지 않았다. 누군가 '구글 인스턴스 (Google Instance)'라인을 따라 구글과 계속 진행되고있는 장면 뒤에 어떤 것이 있다는 것을 나에게 이야기했다. 나는 100 % 아니지만 그게 문제가 될 수 있을까? 그들은 구글이 자동화를 막으려한다고 말했다. – user3358673