虽然昨天我可以很容易地使用Selename在Archive.org上导航,但今天我不能以任何方式使用该网站上的Selify功能.甚至我点击一个简单的搜索按钮的代码也不起作用.对此有什么解决方案吗?

我使用了IMPORT UNDETECTED_ROUMEDIVER,但它不起作用,我也try 了替代Selify的PlayWright库,但它不起作用

from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import undetected_chromedriver as uc

chrome_driver_path = "chromedriver"

keyword = "photo"
url_photo = f"https://archive.org/search?query={keyword}&and%5B%5D=mediatype%3A%22image%22"

chrome_options = Options()
# chrome_options.add_argument('--headless')
service = Service('chromedriver')
options = webdriver.ChromeOptions()

options.add_argument("start-maximized")
options.add_argument("disable-infobars")
options.add_argument("--disable-extensions")

driver = uc.Chrome(options=options)

driver.get(url_photo)

WebDriverWait(driver, 100).until(EC.element_to_be_clickable((By.XPATH
                                                             ,
                                                             "/html/body/app-root//main/div/router-slot/search-page//div/div[2]/collection-browser//div/div[3]/infinite-scroller//section/article[1]/tile-dispatcher//div/a/item-tile//div/div/div/image-block//div/item-image//div/img"))).click()
print("request successful")

推荐答案

网站https://archive.org/search?query=photo&and%5B%5D=mediatype%3A%22image%22内的Search字段位于多个#shadow-root (open)元素的深处.

search


要将character sequence发送到Search字段,您必须使用shadowRoot.querySelector(),您可以使用以下locator strategies:

  • 代码块:

    driver.get("https://archive.org/search?query=photo&and%5B%5D=mediatype%3A%22image%22")
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((driver.execute_script("return document.querySelector('app-root').shadowRoot.querySelector('search-page').shadowRoot.querySelector('collection-search-input').shadowRoot.querySelector('ia-clearable-text-input').shadowRoot.querySelector('input#text-input')")))).send_keys("xtrabyte")
    
  • 浏览器快照:

xtrabyte


参考文献

您可以在以下位置找到几个相关的讨论:

Python-3.x相关问答推荐

无法使用Python发送带有参数和标头的POST请求

Python webdrivermanager 和 Chrome 115.0 的 URL https://chromedriver.storage.googleapis.com/LATEST_RELEASE_115.0.5790 错误没有此类驱动程序

如何创建与导航抽屉一起使用的导航栏

python3,将整数转换为字节:对于小整数使用 to_bytes() 有哪些替代方法?

我想使用命令提示符安装 cv2

隐藏Cartopy中高纬度非矩形投影的右侧轴(纬度)标签

如何在python 3.10中将列表项(字符串类型)转换为模块函数

Python rolling_corr 取消后,应该用什么方法来处理

spaCy 中的匹配模式返回空结果

魔术8球txt文件列表

运行 pip install -r requirements.txt 时出错

Django 2 个字段之一不能为空

UnicodeDecodeError:utf-8编解码器无法解码位置 1 的字节 0x8b:无效的起始字节,同时读取Pandas中的 csv 文件

为什么 Django South 1.0 使用 iteritems()?

Python 类型提示语法如何/为什么起作用?

Python中调用者函数的访问变量

如何使用请求发送带有标头的 PATCH 请求

使用 python 3.0 的 Numpy

如何判断列表中的所有项目是否都是字符串

如何从集合中删除多个元素?