如何从 selenium 和 splinter 中单击动态按钮 link“#”?
How click on dynamic buttons link "#" from selenium and splinter?
我想从网站上删除一些东西(例如 facebook(不使用图 api 只是为了学习),所以我成功登录并登陆首页,我想在那里删除一些数据,但是问题是当我登陆首页时,Facebook 显示一个图层和一个框,上面写着 "turn on notification",现在没有点击 "Not Now" 或 "turn on" 之间的任何按钮我什么也做不了使用 splinter,当我尝试单击 splinter 时没有执行任何操作,因为那些按钮的 link 是“#”
当鼠标悬停在按钮页脚上时显示:
并检查元素显示:
我尝试使用其他帐户,但登录后第一件事就是显示此图层:
现在我想知道如何通过 splinter 或 selenium 单击这两种类型的按钮:
第一种将“#”显示为 href 的按钮
秒,chrome 显示块,允许事情
我的代码是:
from selenium import webdriver
from splinter import Browser
web_driver=webdriver.Chrome('/Users/paul/Downloads/chromedriver/chromedriver')
url = "https://www.example.com"
browser = Browser("chrome")
visit_browser = browser.visit(url)
email_box = '//*[@id="email"]'
find_1 = browser.find_by_xpath(email_box)
find_1.fill("example@gmail.com")
password_box = '//*[@id="pass"]'
find_2 = browser.find_by_xpath(password_box)
find_2.fill("example12345")
button_sub = '//*[@id="u_0_5"]'
find_3 = browser.find_by_xpath(button_sub)
find_3.click()
出于测试目的,您可以在 Facebook 的趋势部分尝试 "see more button",它也显示“#”如何点击它?
不允许我发表评论,因为我没有足够的代表...但是您是否尝试过 select 通过 class 元素然后对其执行 .click() ?这可能会起作用,因为 href 是“#”可能意味着该按钮有另一个用途。
我已经解决了我的问题,因为 link 是“#”所以如果我通过 css 或其他方法点击它只是重新加载页面并且该层在之后一次又一次地出现每次重新加载,但我尝试了一些不同的解决方案,然后按 javascript :
单击它
首先,我尝试在 chrome 中找到用于通过 js 控制台单击的正确元素:
document.getElementsByClassName('layerCancel _4jy0 _4jy3 _517h _51sy _42ft')[0].click();
这在 js 控制台中运行完美,所以现在我使用了 splinter 方法 "browser.execute_script()"
并将该脚本作为参数传递给此方法。
browser.execute_script("document.getElementsByClassName('layerCancel _4jy0 _4jy3 _517h _51sy _42ft')[0].click()")
它现在可以正常工作了,正如我想要的那样。但我仍然没有找到一种方法如何点击浏览器推送通知“允许”,"Block" 等
谢谢:)
我想从网站上删除一些东西(例如 facebook(不使用图 api 只是为了学习),所以我成功登录并登陆首页,我想在那里删除一些数据,但是问题是当我登陆首页时,Facebook 显示一个图层和一个框,上面写着 "turn on notification",现在没有点击 "Not Now" 或 "turn on" 之间的任何按钮我什么也做不了使用 splinter,当我尝试单击 splinter 时没有执行任何操作,因为那些按钮的 link 是“#”
当鼠标悬停在按钮页脚上时显示:
并检查元素显示:
我尝试使用其他帐户,但登录后第一件事就是显示此图层:
现在我想知道如何通过 splinter 或 selenium 单击这两种类型的按钮:
第一种将“#”显示为 href 的按钮
秒,chrome 显示块,允许事情
我的代码是:
from selenium import webdriver
from splinter import Browser
web_driver=webdriver.Chrome('/Users/paul/Downloads/chromedriver/chromedriver')
url = "https://www.example.com"
browser = Browser("chrome")
visit_browser = browser.visit(url)
email_box = '//*[@id="email"]'
find_1 = browser.find_by_xpath(email_box)
find_1.fill("example@gmail.com")
password_box = '//*[@id="pass"]'
find_2 = browser.find_by_xpath(password_box)
find_2.fill("example12345")
button_sub = '//*[@id="u_0_5"]'
find_3 = browser.find_by_xpath(button_sub)
find_3.click()
出于测试目的,您可以在 Facebook 的趋势部分尝试 "see more button",它也显示“#”如何点击它?
不允许我发表评论,因为我没有足够的代表...但是您是否尝试过 select 通过 class 元素然后对其执行 .click() ?这可能会起作用,因为 href 是“#”可能意味着该按钮有另一个用途。
我已经解决了我的问题,因为 link 是“#”所以如果我通过 css 或其他方法点击它只是重新加载页面并且该层在之后一次又一次地出现每次重新加载,但我尝试了一些不同的解决方案,然后按 javascript :
单击它首先,我尝试在 chrome 中找到用于通过 js 控制台单击的正确元素:
document.getElementsByClassName('layerCancel _4jy0 _4jy3 _517h _51sy _42ft')[0].click();
这在 js 控制台中运行完美,所以现在我使用了 splinter 方法 "browser.execute_script()"
并将该脚本作为参数传递给此方法。
browser.execute_script("document.getElementsByClassName('layerCancel _4jy0 _4jy3 _517h _51sy _42ft')[0].click()")
它现在可以正常工作了,正如我想要的那样。但我仍然没有找到一种方法如何点击浏览器推送通知“允许”,"Block" 等
谢谢:)