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

问题描述 投票:0回答: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。你能提出一个前进的方向吗?谢谢

python selenium google-chrome getelementsbyclassname execute-script
1个回答
0
投票

产生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
© www.soinside.com 2019 - 2024. All rights reserved.