【发布时间】:2021-12-19 16:20:49
【问题描述】:
我找到了我想要单击的元素,但是每当 Selenium 单击它时,页面不会表现出与我自己手动单击它时相同的行为。如果你去https://www.just-eat.co.uk/restaurants-mcdonalds-victorialondon/menu,选择“Double Big Mac Meal”并点击弹出窗口中的一个项目,你会注意到弹出窗口会自动滚动到下一个部分,当所有需要的部分都被选中时,底部的按钮会亮起橙色。但是,当我运行以下脚本时,它会很好地单击元素,但不会触发自动滚动,也不会在单击所有必需元素后按钮亮起橙色。
基本上用 selenium 点击元素与手动点击它是不同的,但我不知道为什么。我试过了:
- Webdrive 等待
- 动作链
- execute_script("arguments[0].scrollIntoView();"
- 单击元素的父级(和所有父级)
- 单击元素的子元素
- 在元素上按“Enter”而不是单击
有谁知道为什么单击该元素不会导致相同的行为或我可以尝试单击该元素的其他什么?
这是一个最小的可运行示例:
import requests
from bs4 import BeautifulSoup
from urllib.request import Request, urlopen
import json
import ssl
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.action_chains import ActionChains
import time
import difflib
url = "https://www.just-eat.co.uk/restaurants-mcdonalds-victorialondon/menu"
browser = webdriver.Firefox()
browser.get(url)
browser.maximize_window()
main = "Double Big Mac Meal"
browser.find_element_by_css_selector("button.Button_o-btn_1KX8u:nth-child(2)").click()
h3_tags = browser.find_elements_by_tag_name('h3')
for tag in h3_tags:
if tag.text == main:
tag.click()
add_ons = WebDriverWait(browser, 10).until(
EC.presence_of_all_elements_located((By.CLASS_NAME, "c-itemSelector-section-label")))
for a in add_ons:
add_on = browser.find_elements_by_tag_name('span')
add_on_list = []
for i in add_on:
add_on_list.append(i.text)
action = ActionChains(browser)
element1 = "Side Salad"
if element1:
spans = browser.find_elements_by_tag_name("span")
for span in spans:
if span.text == element1:
popup = browser.find_element_by_css_selector('.c-megaModal-document--scrollable')
x = False
while x == False:
try:
element = browser.find_element_by_xpath(f'//span[contains(text(), "{element1}")]')
time.sleep(2)
x = True
break
except Exception as e:
print(e)
popup.send_keys(Keys.ARROW_DOWN)
time.sleep(0.5)
【问题讨论】:
标签: python selenium selenium-webdriver