如何解决无法在烂番茄上找到 HTML 元素
我想在 Rotten Tomatoes 上找到一部电影并获得它的评分,但我被卡住了,因为我不知道如何在搜索结果部分点击它。我尝试了几乎所有 XPATH 或 CLASS NAME,但每次我收到错误消息时都找不到该元素。我正在使用 Python Selenium。 我的代码:
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
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(executable_path="./drivers/chromedriver",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
self.driver.find_element_by_id("truste-consent-button").click()
# click on film (THE PROBLEM)
element(self.driver,By.CLASS_NAME,"media-col thumbnail-group").click()
rottentomatoes = rottenTomatoes("Shawshank")
rottentomatoes.search()
编辑 错误信息:
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,"media-col thumbnail-group").click()
AttributeError: 'NoneType' object has no attribute 'click'
解决方法
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()
添加了元素在 shadowRoot 中的完整代码,所以你必须使用 javascript
,您可以使用requests
:
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)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。