python - Selenium 按类和标签查找方法显示不存在任何元素
问题描述
我正在尝试从我的 Netflix 帐户中推断出 Selenium 的偏好。使用 find_elements_by_class_name 我设法登录,选择个人资料,打开帐户页面并将列表从视图更改为评分,但我不知道如何从表中选择电影,因为上述功能没有显示任何结果当用于他们的类或标签名称时。
这是我到目前为止编写的代码,我只遇到了最后一行的问题:
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.keys import Keys
from selenium import webdriver
ch = Options()
ch.add_argument("--disable-extensions")
ch.add_argument("--disable-gpu")
ch.add_argument("--incognito")
browser = webdriver.Chrome(options = ch)
browser.get("https://www.netflix.com/login")
username = browser.find_element_by_id("id_userLoginId")
password = browser.find_element_by_id("id_password")
username.send_keys(input('Insert e-mail: '))
password.send_keys(getpass(prompt = "Insert password: "))
password.send_keys(Keys.ENTER)
profiles = browser.find_elements_by_class_name("profile-name")
print(profiles)
profiles[0].click()
browser.get("https://www.netflix.com/viewingactivity")
browser.find_element_by_class_name("choice.icon.rating").click()
print(browser.find_elements_by_class_name("retableRow"))
我所指的 Hmtl 代码是(抱歉格式很糟糕):
<ul class="structural retable stdHeight">
<li class="retableRow">
<div class="col date nowrap">05/09/19
</div>
<div class="col title">
<a href="/title/70099111">Watchmen</a></div><div class="col rating nowrap"><div class="thumbs-component thumbs thumbs-horizontal rated rated-up" data-uia="thumbs-container">
<div class="nf-svg-button-wrapper thumb-container thumb-up-container " data-uia="">
<a role="link" data-rating="0" tabindex="0" class="nf-svg-button simpleround" aria-label="Già valutato: pollice alzato (fai clic per rimuovere la valutazione)">
<svg data-rating="0" class="svg-icon svg-icon-thumb-up-filled" focusable="true">
<use filter="" xlink:href="#thumb-up-filled"></use></svg></a></div><div class="nf-svg-button-wrapper thumb-container thumb-down-container " data-uia="">
<a role="link" data-rating="1" tabindex="0" class="nf-svg-button simpleround" aria-label="Valutazione pollice verso">
<svg data-rating="1" class="svg-icon svg-icon-thumb-down" focusable="true"><use filter="" xlink:href="#thumb-down">
</use>
</svg>
</a>
</div>
<div class="nf-svg-button-wrapper clear-rating" data-uia="">
<a role="link" data-rating="0" data-clear-thumbs="true" tabindex="0" class="nf-svg-button simpleround" aria-label="Rimuovi la valutazione">
<svg data-rating="0" data-clear-thumbs="true" class="svg-icon svg-icon-close" focusable="true">
<use filter="" xlink:href="#close">
</use>
</svg>
</a>
</div>
</div>
</div>
</li>
它应该打印“retableRow”类的所有元素的列表,但它会打印一个空列表。我已经尝试使用具有相似结果的类“col.title”,并使用标签“li”给了我完全不同的元素,我不感兴趣。我做错了什么?
解决方案
您正在尝试查找尚不存在的元素。页面可能是通过 ajax 调用或其他方式更新的。
browser.find_element_by_class_name("choice.icon.rating").click()
time.sleep(1)
print(browser.find_elements_by_class_name("retableRow"))
达达姆。等待它。
更优雅的方法是等待元素存在,然后开始解析。例子:
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.by import By
def wait_for_elem_by_xpath(xp):
elem = WebDriverWait(browser, 20).until(EC.presence_of_element_located((By.XPATH, xp)))
return elem
这样,将示例代码中的最后一行替换为:
your_list = wait_for_elem_by_xpath('//*[@class="retableRow"]')
print(your_list)
它会起作用。
推荐阅读
- docker - Heroku 代码=H14 没有运行 Web 进程 - Docker 映像
- sql - 无法使用 FoxPro 从数据库中获取所需数据
- android - 如何在 Android Studio 模拟器中使用 Pixel 4(或任何支持 Face ID 的 Android 设备)
- html - 如何在不透明度设置为 0 的元素上设置标签索引
- sql - 获取具有相同值 SQL 的对
- angular - 表单组中的 MatAutocompleteModule
- node.js - 无法在反应“意外使用'self'”中使用jsmpeg
- azure-active-directory - OData - 获取实体的单个属性
- firebase - 使用颤振的当前用户将配置文件更新到 Firestore 云
- docker - 与 dns 名称的 Pod 间通信在 kubernetes 中不起作用