[英]Python Selenium how to use an existing chromedriver window?
我正在制作一個自動的python腳本,該腳本會在循環中打開chromedriver,直到它在驅動程序獲取的網頁上找到特定元素(使用硒)為止。 顯然,這最終會耗盡資源,因為它在循環中不斷打開和關閉驅動程序。
有沒有一種方法可以使用現有的chromedriver窗口,而不僅僅是在循環中打開和關閉直到滿足條件?
如果這不可能,那么您會推薦另一種方法嗎?
謝謝!
腳本:
from selenium.webdriver.common.keys import Keys
from selenium import webdriver
import pyautogui
import time
import os
def snkrs():
driver = webdriver.Chrome('/Users/me/Desktop/Random/chromedriver')
driver.get('https://www.nike.com/launch/?s=in-stock')
time.sleep(3)
pyautogui.click(184,451)
pyautogui.click(184,451)
current = driver.current_url
driver.get(current)
time.sleep(3.5)
elem = driver.find_element_by_xpath("//* .
[@id='j_s17368440']/div[2]/aside/div[1]/h1")
ihtml = elem.get_attribute('innerHTML')
if ihtml == 'MOON RACER':
os.system("clear")
print("SNKR has not dropped")
time.sleep(1)
else:
print("SNKR has dropped")
pyautogui.click(1303,380)
pyautogui.hotkey('command', 't')
pyautogui.typewrite('python3 messages.py') # Notifies me by text
pyautogui.press('return')
pyautogui.click(928,248)
pyautogui.hotkey('ctrl', 'z') # Kills the bash loop
snkrs()
Bash循環文件:
#!/bin/bash
while [ 1 ]
do
python snkrs.py
done
如果您只是想等到頁面上有什么變化,那么這應該可以解決問題:
snkr_has_not_dropped = True
while snkr_has_not_dropped:
elem = driver.find_element_by_xpath("//* .[ @ id = 'j_s17368440'] / div[2] / aside / div[1] / h1")
ihtml = elem.get_attribute('innerHTML')
if ihtml == 'MOON RACER':
print("SNKR has not dropped")
driver.refresh()
else:
print("SNKR has dropped")
snkr_has_not_dropped = False
只需刷新頁面,然后重試。
您正在定義一個包含chromedriver啟動的方法,然后在該方法中運行一次(不循環),因此每個方法調用都會生成一個新的瀏覽器實例。 而不是那樣做,要做更多這樣的事情……
url = 'https://www.nike.com/launch/?s=in-stock'
driver.get(url)
# toggle grid view
WebDriverWait(driver, 5).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button[aria-label='Show Products as List']"))).click();
# wait for shoes to drop
while not driver.find_elements((By.XPATH, "//div[@class='figcaption-content']//h3[contains(.,'MOON RACER')]"))
print("SNKR has not dropped")
time.sleep(300) // 300s = 5 mins, don't spam their site
driver.get(url)
print("SNKR has dropped")
我簡化了代碼,更改了定位器,並添加了一個循環。 該腳本將啟動瀏覽器(一次),加載網站,單擊網格視圖切換按鈕,然后查找要在此列表中顯示的所需鞋子。 如果鞋子不存在,它會休眠5分鍾,重新加載頁面,然后重試。 無需每1秒刷新一次頁面。 您將引起自己的注意,並且無論如何網站上都不會更新鞋子。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.