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

动态网站按类名查找元素,并使用Selenium和Chrome在Python中执行与类关联的onclick方法,python,selenium,google-chrome,getelementsbyclassname,execute-script,Python,Selenium,Google Chrome,Getelementsbyclassname,Execute Script,我正在开发Python、Selenium和Chrome驱动程序。我有一个动态网站,每次网站加载时ID都会被更改,因此我不能使用Xpath。但是我可以用类名。我可以到下面的班级; 以下是网站的代码 <a class="appButton registerItemSearch-tabs-criteriaAndButtons-buttonPad-search appSearchButton appPrimaryButton appButtonPrimary appSubmitButton app

我正在开发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>
现在我想执行与该类关联的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脚本。 你能提出一个前进的方向吗。
感谢您

诱导
WebDriverWait
元素可点击
()和以下定位器

Xpath

WebDriverWait(driver,20).until(EC.element_to_be_clickable((By.XPATH,"//a[.//span[text()='Search']]"))).click()
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()
CSS选择器

WebDriverWait(driver,20).until(EC.element_to_be_clickable((By.XPATH,"//a[.//span[text()='Search']]"))).click()
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

诱导
WebDriverWait
元素可点击
()并跟随定位器

Xpath

WebDriverWait(driver,20).until(EC.element_to_be_clickable((By.XPATH,"//a[.//span[text()='Search']]"))).click()
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()
CSS选择器

WebDriverWait(driver,20).until(EC.element_to_be_clickable((By.XPATH,"//a[.//span[text()='Search']]"))).click()
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

您是否试图单击
xxx
中的值?使用
xxx.click()
。是的,请详细说明xxx。click()不起作用。AttributeError:'list'对象没有属性'click'用户
驱动程序。按类名查找元素名
而不是
驱动程序。按类名查找元素名
为什么不能使用xpath,我就是不明白。这里是元素(//span[@class='left']/parent::a)的Xpath,我刚刚检查过它,它不依赖于任何动态属性。对其他元素使用相同的方法。Hi driver.find_element_by_class_name有一个单击方法。谢谢你指出这一点。但是我需要执行与点击相关联的JS。单击()不起作用。您是否尝试单击
xxx
中的值?使用
xxx.click()
。是的,请详细说明xxx。click()不起作用。AttributeError:'list'对象没有属性'click'用户
驱动程序。按类名查找元素名
而不是
驱动程序。按类名查找元素名
为什么不能使用xpath,我就是不明白。这里是元素(//span[@class='left']/parent::a)的Xpath,我刚刚检查过它,它不依赖于任何动态属性。对其他元素使用相同的方法。Hi driver.find_element_by_class_name有一个单击方法。谢谢你指出这一点。但是我需要执行与点击相关联的JS。只需单击()就行了。非常感谢Kunduk,上面的工作,我打算使用CSS选择器。我觉得比你安全。再次感谢。非常感谢昆都克,上面的作品,我打算使用CSS选择器。我觉得比你安全。再次感谢。