动态网站按类名查找元素,并使用Selenium和Chrome在Python中执行与类关联的onclick方法

2024-10-01 09:39:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在开发Python、Selenium和Chrome驱动程序。我有一个动态网站,每次网站加载时ID都会被更改,因此我不能使用Xpath。但是我可以用类名。我可以到下面的班级; 以下是网站的代码

<a class="appButton registerItemSearch-tabs-criteriaAndButtons-buttonPad-search appSearchButton appPrimaryButton appButtonPrimary appSubmitButton appNotReadOnly appIndex2" id="nodeW830" href="#" onclick="return function(me){var retVal = false; if (catHtmlFragmentCallback('W830','buttonPush',null,{asyncUpdate:true,containerSelector:'#AsyncWrapperW814',containerNodeId:'W814',success:function(html){jQuery('#AsyncWrapperW814').empty().append(html);webuiAsyncOk('#AsyncWrapperW814');}}, me) == 'skip') retVal = true;return retVal;}(this)" tabindex="118"><span class="left"></span><span class="appReceiveFocus" tabindex="-1">Search</span><span class="right"></span></a>

然而,我可以做到以下几点:;去元素

xxx = driver.find_elements_by_class_name("appButton.registerItemSearch-tabs-criteriaAndButtons-buttonPad-search.appSearchButton.appButtonPrimary.appPrimaryButton.appSubmitButton.appNotReadOnly.appIndex2")

现在我想执行与该类关联的onclick方法。我可以像下面这样做

driver.execute_script("return function(me){var retVal = false; if (catHtmlFragmentCallback('W830','buttonPush',null,{asyncUpdate:true,containerSelector:'#AsyncWrapperW814',containerNodeId:'W814',success:function(html){jQuery('#AsyncWrapperW814').empty().append(html);webuiAsyncOk('#AsyncWrapperW814');}}, me) == 'skip') retVal = true;return retVal;}(this)")

但是正如我提到的,我不能硬编码driver.execute\u脚本值。我应该动态地获取值。你能帮帮我吗? 如果您能建议一种方法,我可以通过类名找到元素并执行onclick方法。或者像我提到的那样; 我可以通过类名找到元素,如果我可以得到与元素关联的代码(HTML),那么我可以执行driver.execute\u脚本。 你能提出一个前进的方向吗。 多谢各位


Tags: 方法true元素executereturn网站htmldriver
1条回答
网友
1楼 · 发布于 2024-10-01 09:39:50

诱导WebDriverWaitelement_to_be_clickable()并跟随定位器

Xpath

WebDriverWait(driver,20).until(EC.element_to_be_clickable((By.XPATH,"//a[.//span[text()='Search']]"))).click()

CSS选择器

WebDriverWait(driver,20).until(EC.element_to_be_clickable((By.CSS_SELECTOR,"a.appButton.registerItemSearch-tabs-criteriaAndButtons-buttonPad-search.appSearchButton.appPrimaryButton.appButtonPrimary.appSubmitButton.appNotReadOnly.appIndex2"))).click()

您需要导入以下库

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

相关问题 更多 >