加载Selenium + Ruby

时间:2019-02-19 19:11:50

标签: javascript ruby selenium

通知我知道之前已经有人问过这个问题,我一直在尝试通过研究其他帖子和硒文档来解决此问题,但是我无法解决该问题。
问题:如何在硒开始之前加载页面上的所有元素?为什么我的代码在某些网页上返回文本值,而不是在此网页上?
重现问题 我在Ruby和Chrome中使用Selenium。我要查找的结果是,转到一个网站,选择一些文本,及其标签名称,即“ // h1'Diamond Physicians Revolutionary Healthcare'”,然后让硒检查该标签。除此站点外,我在其他网页上也取得了成功...“ https://diamondphysicians.com/” ...我相信它是引导“业务”主题,因此,一旦滚动到它们,某些元素就会加载。

这是我一直在阅读和尝试的最好的总结。 (显式等待,隐式等待,单击元素,并且我已尝试滚动到底部)... How to get a Selenium/Ruby bot to wait before performing an action?

代码 *某些东西被散列用于测试

    options = Selenium::WebDriver::Chrome::Options.new
    #options.add_argument('--headless')
    #options.add_argument('--window-size=1280x1280')
    driver = Selenium::WebDriver.for :chrome, options: options
    #driver.navigate.to "https://diamondphysicians.com/"
    #wait = Selenium::WebDriver::Wait.new(:timeout => 15)
    driver.get("https://diamondphysicians.com/")
    #element = wait.until {driver.find_element(:class => "widget-title")}
    #element.click
    #driver.element(:class, "widget-title").when_present.click
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight)")

    substring = "Welcome to the future of primary care!"
    driver.find_elements(:xpath => "//p").each do |r|
        puts "Cell Value: " + r.text
        if r.text.include? substring
            puts "FOUND IT FOUND IT FOUND IT FOUND IT FOUND IT FOUND IT FOUND IT"
        end 
    end


运行此程序时,我得到
单元格值:
单元格值:
单元格值:
单元格值:
单元格值:
单元格值:
单元格值:
单元格值:
单元格值:
单元格值:
单元格值:
单元格值:
单元格值:
单元格值:
单元格值:
单元值:订阅《钻石医师通讯》以了解最新的新功能,并与其他钻石医师,会员或雇主交流经验


编辑 对于遇到此问题并需要大量资源的任何人,请查看此博客。自2019年2月起有效 https://yizeng.me/2014/04/08/get-text-from-hidden-elements-using-selenium-webdriver/

1 个答案:

答案 0 :(得分:1)

代替这个

driver.find_elements(:xpath => "//p").each do |r|
        puts "Cell Value: " + r.text

请尝试这个

driver.find_elements(:xpath => "//p").each do |r|
        puts "Cell Value: " + driver.execute_script("return arguments[0].innerHTML", r)

请让我知道是否适合您。