簡體   English   中英

Python Selenium如何使用現有的chromedriver窗口?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM