【问题标题】:Selenium PhantomJS save screenshot not getting the correct pageSelenium PhantomJS 保存屏幕截图没有得到正确的页面
【发布时间】:2018-01-20 12:21:18
【问题描述】:

我有以下 Python 代码来截取网页截图。它在大多数情况下都很好用,但是当我尝试打印时

http://www.totalwine.com/wine/red-wine/pinot-noir/c/000018

我得到一个不同的屏幕截图 - 与实际页面不同(我有时会得到正确的屏幕截图)。有人可以帮忙吗。我附上了我得到的输出截图。请在浏览器上加载上述链接,您将看到不同的页面。

我认为可能的原因可能是 1)页面加载的时机 2)弹出

谁能帮忙

def screenshot_util(url):
    browser = webdriver.PhantomJS(service_log_path='ghostdriver.log')
    browser.set_window_size(1024, 768)    
    browser.get(url)
    browser.save_screenshot('temp.png')
    print(browser.current_url)
    browser.quit()
    return

url_to_print = 'http://www.totalwine.com/wine/red-wine/pinot-noir/c/000018'
screenshot_util(url_to_print)

【问题讨论】:

    标签: python python-3.x selenium phantomjs


    【解决方案1】:

    您的代码几乎完美,但有一个小错误。您正在尝试获取screenshot 并将其简单地保存为temp.png。这里webdriver 获取了截图的名称,但不确定要保存截图的位置。

    browser.save_screenshot('temp.png')
    

    解决方案:

    作为解决方案,我使用了您自己的代码,并提供了一个逻辑路径,指向已在我的项目空间下创建的 Screenshots 子目录 (./Screenshots/)。 driver 似乎很高兴将屏幕截图保存在那里,命名为temp.png。这是修改后的代码块:

    from selenium import webdriver
    
    def screenshot_util(url):
        browser = webdriver.PhantomJS(service_log_path='./Logs/logs.log', executable_path="C:\\Utility\\phantomjs-2.1.1-windows\\bin\\phantomjs.exe")
        browser.set_window_size(1024, 768)
        browser.get(url)
        browser.save_screenshot('./Screenshots/temp.png')
        print(browser.current_url)
        browser.quit()
        return
    
    url_to_print = 'http://www.totalwine.com/wine/red-wine/pinot-noir/c/000018'
    screenshot_util(url_to_print)
    

    【讨论】:

      【解决方案2】:

      以编程方式单击弹出窗口上的“是”按钮并等待几秒钟,如下所示:

      from selenium import webdriver
      from time import sleep
      
      def screenshot_util(url):
          browser = webdriver.PhantomJS(service_log_path='ghostdriver.log')
          browser.set_window_size(1024, 768)
          browser.get(url)
          browser.find_element_by_id("btnYes").click()
          sleep(4)
          browser.save_screenshot('temp.png')
          print(browser.current_url)
          browser.quit()
          return
      
      url_to_print = 'http://www.totalwine.com/wine/red-wine/pinot-noir/c/000018'
      screenshot_util(url_to_print)
      

      为清楚起见,我添加到您的代码中的行是:

      from time import sleep
      ...
          browser.find_element_by_id("btnYes").click()
          sleep(4)
      

      【讨论】:

      • 其实我的爬虫很通用。单击此按钮使其非常特定于该页面。经过更多分析,我认为这可能不是因为弹出窗口。这可能是因为时间问题,因为我有时会得到正确的屏幕截图
      猜你喜欢
      • 2014-11-30
      • 1970-01-01
      • 1970-01-01
      • 2015-05-16
      • 1970-01-01
      • 2023-04-10
      • 2021-06-18
      • 2015-10-30
      • 2019-07-10
      相关资源
      最近更新 更多