我试图使用python-selenium绑定点击一个按钮;到目前为止尝试各种选择器没有任何运气。我正在使用Chromedriver。
我可以使用elem = driver.find_element(by='xpath', value="//div[@id='gwt-debug-search-button']")
选择一个元素没有错误,但在尝试点击它时会显示element is not visible
我使用了动作链,它没有任何错误,但没有发生按钮。我无法弄清楚这个问题。如果您之前已解决过类似问题,请分享。
get_ideas = driver.find_element(by='xpath', value="//span[@id='gwt-debug-search-button-content'][normalize-space()='Get ideas']")
chains = ActionChains(driver)
chains.click(on_element=elem).perform()
这是html来源:
<div tabindex="0" class="goog-button-base goog-inline-block goog-button aw-btn aw-larger-button aw-save-button" role="button" id="gwt-debug-search-button">
<input type="text" tabindex="-1" role="presentation" style="opacity: 0; height: 1px; width: 1px; z-index: -1; overflow: hidden; position: absolute;">
<div class="goog-button-base-outer-box goog-inline-block">
<div class="goog-button-base-inner-box goog-inline-block">
<div class="goog-button-base-pos">
<div class="goog-button-base-top-shadow"> </div>
<div class="goog-button-base-content">
<span id="gwt-debug-search-button-content">Get ideas</span>
</div>
</div>
</div>
</div>
</div>
答案 0 :(得分:1)
我从未使用ActionChains
而是选择这种方法:
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait #set wait time
from selenium.webdriver.support import expected_conditions as EC #specify the expected condition
driver = webdriver.Firefox() # Or whatever you prefer
driver.get(your_website_url)
WebDriverWait(driver, 30).until(EC.title_contains(my_website_title))
在您的情况下,您可能希望让驱动程序等待您的页面包含您要单击的按钮。
关于点击按钮,我建议你使用类似的东西:
# option 1
get_ideas = driver.find_element_by_xpath("//span[@id='gwt-debug-search-button-content']")
# option 2
get_ideas = driver.find_element_by_link_text("Get ideas")
get_ideas.click()
答案 1 :(得分:0)
所以有一些错误,一个是不使用动作链,除非绝对需要。但另一个是你实际上没有向你的点击事件传递任何东西。
应该是:
SelectedTabItem
执行动作链的真正问题是它是否缓存事件。这意味着如果您不想重命名您曾经做过的每一个新动作,您必须在每次重复使用之前清除您的动作链,或者在每次重新使用时重命名链。
你应该只使用硒的力量进行常规点击和事情,我只会使用动作链进行双击和其他这样的行为,这实际上是它打算做的事情。
这样做,mabe02的答案要容易得多,也更容易阅读!