为了账号安全,请及时绑定邮箱和手机立即绑定

尽管 python selenium 中的文档可用,但元素不可见

尽管 python selenium 中的文档可用,但元素不可见

慕的地10843 2021-11-09 19:38:25
页面链接: https : //contacts.google.com/u/1/?pageId=none期望:我想通过单击附加图像中突出显示的 SVG 插入符号图标来选择所有联系人。面临的问题:获取错误元素在 上不可见svgicon.click()。尽管元素在可见 DOM 中根据附加的图像清晰可用。观察:我注意到,如果我们手动单击插入符号图标,则会通过 JavaScript 插入 DropDown html 代码,并在任何其他主体上单击它会删除 DropDown html 代码。我知道以下用于实现所需的代码语句是正确且有效的,但不会填充 DropDown 。任何帮助深表感谢。//find & click on SVG iconsvgicon = driver.find_element_by_css_selector('div.PFdmz .uzHa0d .RANAid[role="button"]')svgicon.click()//click on all link post dropdown appearswait5.until(EC.presence_of_element_located((By.XPATH, '//div[@class = "jO7h3c" and text() = "All"]'))).click()DOM 图像编辑 1 - 选择所有复选框的 Javascript 示例t=0for _ in range(len(driver.find_elements_by_css_selector('.XXcuqd div[role="checkbox"]'))):    cimgs = driver.find_elements_by_css_selector('.XXcuqd div[role="checkbox"]')    ActionChains(driver).move_to_element(cimgs[t]).perform()    driver.execute_script("arguments[0].click();", cimgs[t])    t = t+1如果我们可以以某种方式使用这种方法来减少标记所有复选框所花费的时间(一次性代替使用 Actionchains),那么这也将解决问题。在任何时候,我都会有 10000 多个联系人参与此活动。
查看完整描述

3 回答

?
30秒到达战场

TA贡献1828条经验 获得超6个赞

出于某种原因,您需要双击该图标:


import selenium

from selenium import webdriver

from selenium.webdriver.common.keys import Keys

from selenium.webdriver.common.by import By

from selenium.webdriver.common.action_chains import ActionChains

import time


driver=webdriver.Firefox()

# Log into Google.

url = "https://accounts.google.com/signin/v2/identifier?hl=en&passive=true&continue=https%3A%2F%2Fwww.google.com%2F&flowName=GlifWebSignIn&flowEntry=ServiceLogin"

driver.get(url)

time.sleep(1)

username = driver.find_element_by_id('identifierId')

username.send_keys("REDACTED")

time.sleep(1)

driver.find_element_by_id('identifierNext').click()

time.sleep(1)

password = driver.find_element_by_name('password')

password.send_keys("REDACTED")

time.sleep(1)

driver.find_element_by_id('passwordNext').click()

time.sleep(1)


url="https://contacts.google.com/"

driver.get(url)

time.sleep(1)

# Select the first contact and click on it to open the desired menu.

contact = driver.find_element_by_css_selector("div[role='checkbox']")

contact.click()

time.sleep(1)

# Double click the selected action icon to open menu.

svgicon = driver.find_element_by_css_selector("div[data-tooltip='Selection actions']")

ActionChains(driver).move_to_element(svgicon).double_click().perform()

time.sleep(1)

# Click the "All" button.

selectall = driver.find_element_by_xpath("//*/div[text()='All']")

selectall.click()


查看完整回答
反对 回复 2021-11-09
?
Cats萌萌

TA贡献1805条经验 获得超9个赞

在您的第一个代码示例中,


svgicon = driver.find_element_by_css_selector('div.PFdmz .uzHa0d 

.RANAid[role="button"]')

选择器匹配四个元素,您要查找的复选框是第四个。如果您还没有,请尝试


svgicon = driver.find_elements_by_css_selector('div.PFdmz .uzHa0d 

.RANAid[role="button"]')[3]

而不是那条线。


我立即确定 JS 执行器,但如果上面的代码不起作用,我可以看看。


查看完整回答
反对 回复 2021-11-09
?
忽然笑

TA贡献1806条经验 获得超5个赞

我不知道为什么,但是Dan-dev 的代码会执行您需要的结果,我已经尝试过了,对我来说效果很好。在这种情况下,当我遇到像您这样的类似问题时,我将提供另一种替代方法,以替代我之前所做的工作。这是我的代码:


from selenium.webdriver.support.ui import Select



#From Dan-dev's code

svgicon = driver.find_element_by_css_selector("div[data-tooltip='Selection 

actions']")

ActionChains(driver).move_to_element(svgicon).double_click().perform()


#Alternative/Optional Solution

driver.execute_script("return arguments[0].removeAttribute('style');", svgicon)

selectall = Select(svgicon)


for option in selectall.options:

 selectall.select_by_visible_text('All')


查看完整回答
反对 回复 2021-11-09
  • 3 回答
  • 0 关注
  • 178 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信