2017-06-26 68 views
0

我有一個腳本,它登錄到一個站點,然後截取屏幕截圖。它在MacOS上以無頭模式使用Chrome 59。使用python在MacOS上使用無頭Chrome的硒 - 時間太長

我有兩個問題,我認爲是相關的。一個問題是,我的腳本需要幾分鐘時間,它應該需要幾秒鐘。第二個是Chrome圖標在我的Dock中徘徊,從不關閉。

我認爲這些問題是由我檢查的網站有幾個不加載的元素造成的。 \images\grey_semi.pnghttps://www.google-analytics.com/analytics.js我認爲這阻止了硒並阻止它按照指示關閉driver.close()

我該怎麼辦?

腳本:

import os 
from selenium import webdriver 
from selenium.webdriver.common.keys import Keys 
from selenium.webdriver.chrome.options import Options 
chrome_options = Options() 
chrome_options.add_argument("--headless") 
driver = webdriver.Chrome(executable_path=os.path.abspath("chromedriver"), chrome_options=chrome_options) 
driver.get("https://url.com/") 
username = driver.find_element_by_name("L1") 
username.clear() 
username.send_keys("name") 
password = driver.find_element_by_name("P1") 
password.clear() 
password.send_keys("pass") 
driver.find_element_by_id("login").click() 
driver.get("https://url.com/Overview.aspx") 
driver.get_screenshot_as_file('main-page.png') 
driver.close() 

回答

0

我解決了這個有以下幾點:

driver.find_element_by_link_text("Job Board").click() 
driver.find_element_by_link_text("Available Deployments").click() 
2

我沒有看到你的代碼中的任何waits。正如您所知,Web應用程序正在使用AJAX技術來加載動態數據。當瀏覽器加載頁面時,該頁面中的元素可能會以不同的時間間隔加載。根據實施情況,load event可能受到google-analytics.com/analytics.js的影響,因爲在加載了所有內容(包括圖像,腳本文件,CSS文件等)後,網頁被認爲是完全加載的。默認情況下,您的UI Selenium測試使用瀏覽器的新實例,因此它不應緩存analytics.js。還需要檢查的一點是,如果將Google Analytics放置在特定位置,以便在頁面加載或運行異步之前不加載它。它曾經在</body>標籤之前,但我相信它現在應該是<head>標籤中的最後一個<script>。你可以找到Page Load Impact of Google Analytics here的更多細節,他們聲稱如果做得對,加載時間非常短,甚至不值得擔心。我最好的猜測是,問題出在Google Analytics的使用方式上。

關於你的第二個問題

瀏覽器圖標,在我的碼頭徘徊,從來沒有關閉

如果你看到在瀏覽器控制檯錯誤,請嘗試使用quit()方法,關閉瀏覽器並關閉在啓動ChromeDriver時啓動的ChromeDriver可執行文件。請記住,close()僅用於關閉瀏覽器,但驅動程序實例仍然懸而未決。另一件需要檢查的事情是,您實際上正在使用可執行文件和Chrome瀏覽器的最新版本,包括ChromeDriver

UPDATE:

如果等待不會影響你的執行時間,這意味着硒將等待網頁加載完成,然後尋找您指定的元素。我能想到是specify a page timeout像這樣的唯一真正的選擇:

from selenium.common.exceptions import TimeoutException 
try: 
    driver.set_page_load_timeout(seconds) 
except TimeoutException: 
    # put code with waits here 
+0

感謝您的答覆。 'driver.quit()'對我來說已經足夠了。謝謝 對於延遲,我嘗試過'driver.implicitly_wait(10)',但它具有相同的效果。你能引導我進行什麼樣的等待,以便「等待10秒鐘然後點擊該死的按鈕」? – jakethedog

+0

作爲參考的谷歌分析腳本是正確的頂部和顯示爲'' – jakethedog

+0

它幾乎總是更好的定義和使用[明確的等待(http://selenium-python.readthedocs.io/waits.html#explicit-waits),作爲谷歌的分析 - 如果u可以改變頁面的代碼,它包含在''去年''

  • 11. 在內部使用NSURLSession時,UIAlertView時間太長
  • 12. PYTZ加載時間太長
  • 13. 使用鉻無頭和硒下載
  • 14. 可以在macOS上使用/ tmp嗎?
  • 15. 使用服務器上的無頭硒裝載Flash內容
  • 16. 不使用xvfb運行硒無頭髮
  • 17. 使用htmlunit在無頭服務器上運行硒測試
  • 18. log4net.Config.XmlConfigurator.Configure()時間太長
  • 19. 龍捲風請求響應時間太長,即使使用gen.coroutine
  • 20. 在Python中使用Selenium Chrome無頭文件下載
  • 21. 硒測試用例可在Firefox中使用,但不能在Chrome中使用 - 無頭設置
  • 22. 使用硒使用python
  • 23. 硒的Python:使用Python
  • 24. NFS時間間隔太長
  • 25. Python瓶heroku - 圖像上傳字段(WTForms)使APP超時(花太長時間)
  • 26. 如何在Windows 10的Chrome 60中使用無頭Chrome?
  • 27. 使用硒與python在phantomjs上禁用Cookies
  • 28. 在查詢時間太長
  • 29. 加載應用的時間太長
  • 30. 調用SignedCMS.Decode花費的時間太長