gpt4 book ai didi

python - 无效 session 异常 : Message: invalid session id taking screenshots in a loop using Selenium and Python

转载 作者:行者123 更新时间:2023-12-05 04:39:07 32 4
gpt4 key购买 nike

我正在用 python 中的 selenium 编写一个程序来搜索网站(每次都会更改但格式相似)并从中下载图像。如果有版权,程序会关闭选项卡,否则它会运行程序的其余部分。但是有一个问题:它会抛出 InvalidSessionIdException。

下面是我写的代码和相关的错误

import time

import imageio as imageio
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.support import expected_conditions as EC

PATH = Service("/Users/fscozano/documenti/chromedriver-2.exe")

print("setup")
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))

wait = WebDriverWait(driver, 10)

for i in range(5):
driver.get("https://apod.nasa.gov/apod/random_apod.html")
copyr = driver.find_elements(By.XPATH, "//center[.//b[contains(.,'Copyright')]]")
wait.until(EC.frame_to_be_available_and_switch_to_it((By.ID, 'apod')))

if copyr:
driver.close()
else:
imageLink = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH,
"//h1[normalize-space()='Astronomy Picture of the Day']//following::p[2]//a/img"))).get_attribute("src")
driver.get(imageLink)

finalImage = driver.save_screenshot("/Users/fscozano/PycharmProjects/NFT_finalProject/images/" + "HightAltitudeImage" + str(i) + ".png")
driver.close()

错误是这样的

  File "/Users/fscozano/PycharmProjects/NFT_finalProject/venv/main.py", line 19, in <module>
driver.get("https://apod.nasa.gov/apod/random_apod.html")
File "/Users/fscozano/PycharmProjects/NFT_finalProject/venv/lib/python3.9/site-packages/selenium/webdriver/remote/webdriver.py", line 436, in get
self.execute(Command.GET, {'url': url})
File "/Users/fscozano/PycharmProjects/NFT_finalProject/venv/lib/python3.9/site-packages/selenium/webdriver/remote/webdriver.py", line 424, in execute
self.error_handler.check_response(response)
File "/Users/fscozano/PycharmProjects/NFT_finalProject/venv/lib/python3.9/site-packages/selenium/webdriver/remote/errorhandler.py", line 247, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
Stacktrace:
0 chromedriver 0x0000000101487269 __gxx_personality_v0 + 582729
1 chromedriver 0x0000000101412c33 __gxx_personality_v0 + 106003
2 chromedriver 0x0000000100fcfcdf chromedriver + 171231
3 chromedriver 0x0000000100ff850e chromedriver + 337166
4 chromedriver 0x0000000100ff9a95 chromedriver + 342677
5 chromedriver 0x00000001014438ab __gxx_personality_v0 + 305803
6 chromedriver 0x000000010145a863 __gxx_personality_v0 + 399939
7 chromedriver 0x000000010145fc7f __gxx_personality_v0 + 421471
8 chromedriver 0x000000010145bbba __gxx_personality_v0 + 404890
9 chromedriver 0x0000000101437e51 __gxx_personality_v0 + 258097
10 chromedriver 0x0000000101477158 __gxx_personality_v0 + 516920
11 chromedriver 0x00000001014772e1 __gxx_personality_v0 + 517313
12 chromedriver 0x000000010148e6f8 __gxx_personality_v0 + 612568
13 libsystem_pthread.dylib 0x00007ff800ccd514 _pthread_start + 125
14 libsystem_pthread.dylib 0x00007ff800cc902f thread_start + 15

另一个问题是程序总是下载图片而不关心“版权”的存在

我该如何解决这些问题?

最佳答案

看起来对版权没有任何依赖。

对于 save_screenshot(),您可以在 open the image url 中使用 adjascent tab 并使用以下 Locator Strategies:

  • 代码块:

    for i in range(2):
    driver.get("https://apod.nasa.gov/apod/random_apod.html")
    windows_before = driver.current_window_handle
    WebDriverWait(driver, 20).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"iframe[src^='https://apod.nasa.gov/apod']")))
    imageLink = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//h1[normalize-space()='Astronomy Picture of the Day']//following::p[2]//a/img"))).get_attribute("src")
    driver.execute_script("window.open('" + imageLink +"');")
    windows_after = driver.window_handles
    new_window = [x for x in windows_after if x != windows_before][0]
    driver.switch_to.window(new_window)
    driver.save_screenshot(f"image_{str(i)}.png")
    driver.close()
    driver.switch_to.window(windows_before)
    driver.quit()
  • 截图:

    • image_0 image_0

    • image_1 image_1

关于python - 无效 session 异常 : Message: invalid session id taking screenshots in a loop using Selenium and Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70474438/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com