1

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

4

1 回答 1

0

归纳WebDriverWaitelement_to_be_clickable() 和跟随定位器。

路径

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
于 2020-01-08T17:35:04.147 回答