我正在制作一个自动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
答案 0 :(得分:0)
如果您只是想等到页面上的某些内容发生变化,那就可以解决问题:
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
只需刷新页面,然后重试。
答案 1 :(得分:0)
您正在定义一个包含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秒刷新一次页面。您将引起自己的注意,并且鞋子也不会经常在网站上更新。