动态网站通过 class 名称查找元素并使用 Selenium 和 Chrome 执行与 Python 中的 class 关联的 onclick 方法

Dynamic website find element by class name and execute onclick method associated with the class in Python with Selenium and Chrome

我正在研究 Python、Selenium 和 Chrome 驱动程序。我有一个动态网站,每次网站加载时 ID 都会更改,因此我无法使用 Xpath。但是我可以使用 class 这个名字。我可以按如下方式到达 class; 以下是网站的代码。

<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")

现在我想执行与 class 关联的 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_script 值进行硬编码。我应该动态获取值。请你帮助我好吗? 如果你能建议一种方法,我可以通过 class 名称找到元素并执行 onclick 方法。或者正如我提到的; 我可以通过 class 名称找到该元素,如果我可以获得与该元素关联的代码 (HTML),那么我可以 driver.execute_script。 你能提出一个前进的方向吗? 谢谢

诱导 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