动态 css 选择器 - Selenium python
dynamic css selector - Selenium python
我正在尝试单击网页上的按钮,该按钮会将我带到用户的电子邮件设置。我想根据网页上的用户名或电子邮件地址找到 css 选择器,然后单击该用户名进入设置。
问题是 css 选择器无法确定我想要的用户,除了保存电子邮件地址的名为 data-testuserid=
的标志。
这是我尝试访问的测试电子邮件的完整元素:
<a id="ctl00_ContentPlaceHolder1_ctlCurrentTab_ctlUserList_ctlUserList_rptList_ctl19_ctlRowContent__lnkUser2" class="linkMild" data-testuserid="testmuser@AlloySystems.com" href="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("ctl00$ContentPlaceHolder1$ctlCurrentTab$ctlUserList$ctlUserList$rptList$ctl19$ctlRowContent$_lnkUser2", "", true, "", "", false, true))">test user</a>
这是 css 选择器,如果您通过右键单击该元素并选择 复制选择器 从 chrome 复制它:
#ctl00_ContentPlaceHolder1_ctlCurrentTab_ctlUserList_ctlUserList_rptList_ctl19_ctlRowContent__lnkUser2
注意到 ct119
?那就是网站上那个电子邮件按钮所在的确切位置,但是如果我想搜索其他人怎么办?我怎样才能创建一个包含电子邮件或别名的 css 选择器?
这是问题的图片:
我现在确实有解决办法,但效果不佳 - 现在,我使用搜索栏搜索我想要的电子邮件,以便它显示在列表中.问题是网站是垃圾,有时网页会因为现在的原因而冻结和卡住。我刷新解决了这个问题,但我想通过精确点击我想要的电子邮件地址的 css 选择器来解决这个问题。
我希望这是有道理的。谢谢大家。
更新
我尝试了@Strik3r 提出的建议,但它对我不起作用。 (我除非我打错了。)
目前的代码如下:
def reset_email():
time.sleep(1)
wait = WebDriverWait(browser_options.browser, 15)
wait.until(EC.element_to_be_clickable((By.XPATH, ("//a[@data-testuserid="+email_selection_only.email_select+"]"))))
im_defaultpolicy = browser_options.browser.find_element_by_xpath("//a[@data-testuserid="+email_selection_only.email_select+"]") #ctl00_ContentPlaceHolder1_ctlCurrentTab_ctlUserList_ctlSearchOptions_txtSearch
im_defaultpolicy.send_keys(Keys.ENTER)
结果如下:
line 147, in reset_email
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, ("//a[@data-testuserid="+email_selection_only.email_select+"]"))))
File "/home/tech/.local/lib/python3.8/site-packages/selenium/webdriver/support/wait.py", line 80, in until
raise TimeoutException(message, screen, stacktrace)
selenium.common.exceptions.TimeoutException: Message:
你试过吗?
//a[@data-testuserid='<value>']
我的理解是“data-testuserid”是 dom 元素的一个属性,因此您应该能够在 xpath 中使用它。
而不是
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, ("//a[@data-testuserid="+email_selection_only.email_select+"]"))))
尝试
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, ("//a[@data-testuserid='+email_selection_only.email_select+']"))))
外部字符串用 "
括起来,而内部字符串用 '
括起来,反之亦然。
但是如果你在这两种情况下都使用 "
Python 将其解释为 2 个字符串
我正在尝试单击网页上的按钮,该按钮会将我带到用户的电子邮件设置。我想根据网页上的用户名或电子邮件地址找到 css 选择器,然后单击该用户名进入设置。
问题是 css 选择器无法确定我想要的用户,除了保存电子邮件地址的名为 data-testuserid=
的标志。
这是我尝试访问的测试电子邮件的完整元素:
<a id="ctl00_ContentPlaceHolder1_ctlCurrentTab_ctlUserList_ctlUserList_rptList_ctl19_ctlRowContent__lnkUser2" class="linkMild" data-testuserid="testmuser@AlloySystems.com" href="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("ctl00$ContentPlaceHolder1$ctlCurrentTab$ctlUserList$ctlUserList$rptList$ctl19$ctlRowContent$_lnkUser2", "", true, "", "", false, true))">test user</a>
这是 css 选择器,如果您通过右键单击该元素并选择 复制选择器 从 chrome 复制它:
#ctl00_ContentPlaceHolder1_ctlCurrentTab_ctlUserList_ctlUserList_rptList_ctl19_ctlRowContent__lnkUser2
注意到 ct119
?那就是网站上那个电子邮件按钮所在的确切位置,但是如果我想搜索其他人怎么办?我怎样才能创建一个包含电子邮件或别名的 css 选择器?
这是问题的图片:
我现在确实有解决办法,但效果不佳 - 现在,我使用搜索栏搜索我想要的电子邮件,以便它显示在列表中.问题是网站是垃圾,有时网页会因为现在的原因而冻结和卡住。我刷新解决了这个问题,但我想通过精确点击我想要的电子邮件地址的 css 选择器来解决这个问题。
我希望这是有道理的。谢谢大家。
更新
我尝试了@Strik3r 提出的建议,但它对我不起作用。 (我除非我打错了。)
目前的代码如下:
def reset_email():
time.sleep(1)
wait = WebDriverWait(browser_options.browser, 15)
wait.until(EC.element_to_be_clickable((By.XPATH, ("//a[@data-testuserid="+email_selection_only.email_select+"]"))))
im_defaultpolicy = browser_options.browser.find_element_by_xpath("//a[@data-testuserid="+email_selection_only.email_select+"]") #ctl00_ContentPlaceHolder1_ctlCurrentTab_ctlUserList_ctlSearchOptions_txtSearch
im_defaultpolicy.send_keys(Keys.ENTER)
结果如下:
line 147, in reset_email
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, ("//a[@data-testuserid="+email_selection_only.email_select+"]"))))
File "/home/tech/.local/lib/python3.8/site-packages/selenium/webdriver/support/wait.py", line 80, in until
raise TimeoutException(message, screen, stacktrace)
selenium.common.exceptions.TimeoutException: Message:
你试过吗?
//a[@data-testuserid='<value>']
我的理解是“data-testuserid”是 dom 元素的一个属性,因此您应该能够在 xpath 中使用它。
而不是
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, ("//a[@data-testuserid="+email_selection_only.email_select+"]"))))
尝试
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, ("//a[@data-testuserid='+email_selection_only.email_select+']"))))
外部字符串用 "
括起来,而内部字符串用 '
括起来,反之亦然。
但是如果你在这两种情况下都使用 "
Python 将其解释为 2 个字符串