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

页面链接: https : //contacts.google.com/u/1/?pageId=none


期望:我想通过单击附加图像中突出显示的 SVG 插入符号图标来选择所有联系人。


面临的问题:获取错误元素在 上不可见svgicon.click()。尽管元素在可见 DOM 中根据附加的图像清晰可用。


观察:我注意到,如果我们手动单击插入符号图标,则会通过 JavaScript 插入 DropDown html 代码,并在任何其他主体上单击它会删除 DropDown html 代码。


我知道以下用于实现所需的代码语句是正确且有效的,但不会填充 DropDown 。任何帮助深表感谢。


//find & click on SVG icon


svgicon = driver.find_element_by_css_selector('div.PFdmz .uzHa0d .RANAid[role="button"]')

svgicon.click()


//click on all link post dropdown appears

wait5.until(EC.presence_of_element_located((By.XPATH, '//div[@class = "jO7h3c" and text() = "All"]'))).click()

DOM 图像

http://img1.mukewang.com/618a5dc70001a04513390630.jpg

编辑 1 - 选择所有复选框的 Javascript 示例


t=0

for _ 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 多个联系人参与此活动。


慕的地10843
浏览 179回答 3
3回答

30秒到达战场

出于某种原因,您需要双击该图标:import seleniumfrom selenium import webdriverfrom selenium.webdriver.common.keys import Keysfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.common.action_chains import ActionChainsimport timedriver=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()

Cats萌萌

在您的第一个代码示例中,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 执行器,但如果上面的代码不起作用,我可以看看。

忽然笑

我不知道为什么,但是Dan-dev 的代码会执行您需要的结果,我已经尝试过了,对我来说效果很好。在这种情况下,当我遇到像您这样的类似问题时,我将提供另一种替代方法,以替代我之前所做的工作。这是我的代码:from selenium.webdriver.support.ui import Select#From Dan-dev's codesvgicon = driver.find_element_by_css_selector("div[data-tooltip='Selection actions']")ActionChains(driver).move_to_element(svgicon).double_click().perform()#Alternative/Optional Solutiondriver.execute_script("return arguments[0].removeAttribute('style');", svgicon)selectall = Select(svgicon)for option in selectall.options: selectall.select_by_visible_text('All')
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python