Selenium 窗口滚动仅适用于使用 Selenium 和 Python 识别 Select 元素的调试模式
Posted
技术标签:
【中文标题】Selenium 窗口滚动仅适用于使用 Selenium 和 Python 识别 Select 元素的调试模式【英文标题】:Selenium window scroll works only in Debug mode identifying Select element using Selenium and Python 【发布时间】:2022-01-23 04:36:40 【问题描述】:我正在抓取一个 VUE.js 网站,当我在 Selenium 中打开调试模式时,它可以找到并单击一个下拉按钮,但是当我在正常模式下运行它时,它会抛出以下内容错误信息:
selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted: Element <select id="sortselectbox" data-ph-at-id="search-page-sort-drop-down" class="form-control au-target" value.bind="searchParams.sortBy" change.delegate="sortfilterSearch()" tabindex="0" data-ph-id="ph-page-element-page20-4VGGDW" au-target-id="169">...</select> is not clickable at point (707, 444). Other element would receive the click: <div class="chatBotNotificationText" tabindex="0">...</div>
(Session info: headless chrome=96.0.4664.110)
这是我找到下拉按钮的方式
Order = driver.find_element_by_xpath("//*[@id='sortselectbox']")
在此之前,我将滚动到网站顶部,以便驱动程序可以看到 sortselectbox
driver.execute_script("window.scrollTo(0, 220)") #Page up
这是 html 元素
<select id="sortselect" data-ph-at-id="search-page-sort-drop-down" class="form-control au-target" value.bind="searchParams.sortBy" change.delegate="sortfilterSearch()" tabindex="0" data-ph-id="ph-page-element-page20-UCZFWs" au-target-id="150"> <option value="Most relevant" key="c-internal-digital-technology-it-53pxnB-ph-search-results-v2-view4-mostRelevantText" data-ph-id="ph-page-element-page20-srcQGN"> Most relevant </option> <option value="Most recent" key="c-internal-digital-technology-it-53pxnB-ph-search-results-v2-view4-mostRecentText" data-ph-id="ph-page-element-page20-Br2Xo6"> Most recent </option> </select>
我尝试在滚动前后添加更多睡眠,但似乎在那一步失败了。所有迹象都表明滚动在正常模式下不起作用。我是否必须找到另一种方法来定位 sortselectbox
按钮而不使用 window.scrollTo
脚本?
谢谢!
【问题讨论】:
用相关的 HTML 更新问题 不幸的是,该网站不可公开访问,而且由于它是在 JS 中,所以源代码也不是静态的。 我也不是要网站网址,而是所需元素的相关 HTML。 对不起,我误解了你我用 HTML 元素更新了我的原始帖子。 【参考方案1】:此错误消息...
selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted: Element <select id="sortselectbox" data-ph-at-id="search-page-sort-drop-down" class="form-control au-target" value.bind="searchParams.sortBy" change.delegate="sortfilterSearch()" tabindex="0" data-ph-id="ph-page-element-page20-4VGGDW" au-target-id="169">...</select> is not clickable at point (707, 444). Other element would receive the click: <div class="chatBotNotificationText" tabindex="0">...</div>
...暗示对html-select 元素的点击尝试被chatBotNotification 阻止。
由于所需的项目是Select 元素,理想情况下是to select an option,您需要为element_to_be_clickable() 诱导WebDriverWait,您可以使用以下任一Locator Strategies:
使用CSS_SELECTOR:
Select(WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "select#sortselect[data-ph-at-id='search-page-sort-drop-down']")))).select_by_value("Most relevant")
使用XPATH:
Select(WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//select[@id='sortselect' and @data-ph-at-id='search-page-sort-drop-down']")))).select_by_value("Most recent")
注意:您必须添加以下导入:
from selenium.webdriver.support.ui import Select
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
【讨论】:
谢谢!我从您的解释中学到了很多东西,并为我指出了导致问题的出现的聊天机器人,现在它可以工作了!以上是关于Selenium 窗口滚动仅适用于使用 Selenium 和 Python 识别 Select 元素的调试模式的主要内容,如果未能解决你的问题,请参考以下文章