Python Can';在腐烂的西红柿上找不到HTML元素

Python Can';在腐烂的西红柿上找不到HTML元素,python,selenium,click,Python,Selenium,Click,我想找一部电影,在《烂西红柿》上获得它的收视率,但我被卡住了,因为我不知道如何在搜索结果部分点击它。我尝试了几乎所有XPATH或类名,但每次都收到错误消息,表示找不到元素。我正在使用Python Selenium。 我的代码: 编辑 错误消息: Can not locate this element Traceback (most recent call last): File "d:\Programovanie\selenium\movie_info\rotten_tomat

我想找一部电影,在《烂西红柿》上获得它的收视率,但我被卡住了,因为我不知道如何在搜索结果部分点击它。我尝试了几乎所有XPATH或类名,但每次都收到错误消息,表示找不到元素。我正在使用Python Selenium。 我的代码:

编辑 错误消息:

Can not locate this element
Traceback (most recent call last):
    File "d:\Programovanie\selenium\movie_info\rotten_tomat.py", line 38, in <module>
    rottentomatoes.search()
  File "d:\Programovanie\selenium\movie_info\rotten_tomat.py", line 35, in search  
    element(self.driver, By.CLASS_NAME, "media-col thumbnail-group").click()
AttributeError: 'NoneType' object has no attribute 'click'
找不到此元素
回溯(最近一次呼叫最后一次):
文件“d:\Programovanie\selenium\movie\u info\roott\u tomat.py”,第38行,在
rottentomotoes.search()
文件“d:\Programovanie\selenium\movie\u info\roott\u tomat.py”,第35行,搜索中
元素(self.driver,By.CLASS_NAME,“媒体列缩略图组”)。单击()
AttributeError:“非类型”对象没有“单击”属性

添加了元素在shadowRoot中的完整代码,因此您必须使用javascript,您可以使用请求:

import requests

shearch = "Shawshank"
choose_type = "movie"
url = f"https://www.rottentomatoes.com/napi/search/all?type={choose_type}&searchQuery={shearch}"

r = requests.get(url)
r_json = r.json()
print(r_json)

你能把你得到的错误包括在内吗?它没有帮助。相同的错误消息。@themm1更新了完整答案,它在阴影dom中。
import sys
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time


def element(driver, by_x, html_element):
    try:
        element = WebDriverWait(driver, 5).until(
            EC.presence_of_element_located((by_x, html_element))
        )
        return element
    except:
        print("Can not locate this element")


class rottenTomatoes:
    def __init__(self, film):
        options = webdriver.ChromeOptions()
        options.add_experimental_option("excludeSwitches", ["enable-logging"])
        self.driver = webdriver.Chrome(
            options=options)
        self.film = film
        self.driver.get("https://www.rottentomatoes.com/")

    def search(self):
        # search for a film
        search_bar = self.driver.find_element_by_class_name("search-text")
        search_bar.click()
        search_bar.send_keys(self.film, Keys.RETURN)
        # filter movies only
        element(self.driver, By.XPATH, "// *[@id='main-page-content']/div/section[1]/search-result-container/nav/ul/li[3]/span").click()
        # accept cookies
        time.sleep(5)
        try:
            self.driver.find_element_by_id("truste-consent-button").click()
        except:
            pass

        ele = self.driver.execute_script(
            "return document.querySelector('search-result-container').shadowRoot.querySelector('[type=\"movie\"]').shadowRoot.querySelector('media-row').shadowRoot.querySelector('[class=\"media-row center\"]')")
        # click on film (THE PROBLEM)
        ele.click()
        time.sleep(10)


rottentomatoes = rottenTomatoes("Shawshank")
rottentomatoes.search()
import requests

shearch = "Shawshank"
choose_type = "movie"
url = f"https://www.rottentomatoes.com/napi/search/all?type={choose_type}&searchQuery={shearch}"

r = requests.get(url)
r_json = r.json()
print(r_json)