Selenium webdriver无法执行按钮单击

时间:2016-07-14 04:06:08

标签: python selenium selenium-webdriver automation

我使用selenium webdriver遇到了按钮点击问题。 我试图点击" like按钮"但它不起作用。

这是我的硒源代码:

driver = webdriver.Chrome(executable_path=cwd+'chromedriver', chrome_options=chrome_options)
driver.get('https://tw.carousell.com/')
time.sleep(5)
#carousell_login() my login part
time.sleep(5)
for_her = driver.find_element_by_xpath('//*[@id="root"]/div/div[1]/div/div/section[3]/div[2]/div[2]/a')
for_her.click()
time.sleep(5)
like_button = driver.find_element_by_xpath('//*[@id="root"]/div/div[1]/div/div[2]/div[2]/div/div/div[1]/figure/div/button')
print like_button.get_attribute('outerHTML')
webdriver.ActionChains(driver).move_to_element(like_button).click(like_button).perform()

enter image description here

这是输出:

<button class="btn btn-default pdt-card-like"><i class="fa fa-heart"></i></button>

似乎我找到了那个元素。我不知道为什么点击不起作用。

对此问题有任何建议吗?

谢谢!

=============================================== ========================= 通过使用Andersson的解决方案,它使点击操作有效! 感谢您的提示!

driver.execute_script('document.querySelectorAll("button.btn.btn-default.pdt-card-like")[0].style.display="block";')
driver.execute_script('document.querySelectorAll("button.btn.btn-default.pdt-card-like")[0].style.visibility="visible";')
driver.find_elements_by_xpath('//button[@class="btn btn-default pdt-card-like"]')[0].click()

2 个答案:

答案 0 :(得分:1)

“赞”按钮最初不可见,因此您不能只是点击它 - 如果首先可见,您应该制作,所以请尝试以下代码:

number = 0
driver.execute_script('document.querySelectorAll("button.btn.btn-default.pdt-card-like")[number].style.display="block";')
driver.execute_script('document.querySelectorAll("button.btn.btn-default.pdt-card-like")[number].style.visibility="visible";')
driver.find_elements_by_xpath('//button[@class="btn btn-default pdt-card-like"]')[number].click()

这应该允许你“喜欢”第一项。设置另一个number值以更改目标项

答案 1 :(得分:0)

我相信您需要将鼠标悬停在缩略图之前才显示相似按钮。尝试将move_to_element分开,然后单击两个单独的方法并在两者之间进行休眠。 对不起,我不懂Python,但看起来应该是这样的。

webdriver.ActionChains(driver).move_to_element(like_button).perform()
sleep(1000)
webdriver.ActionChains(driver).click(like_button).perform()

如果它仍然不起作用,您可能希望将要移动的元素更改为缩略图元素。例如:

image = driver.find_element_by_xpath('//div[@class="pdt-card-img"]')
webdriver.ActionChains(driver).move_to_element(image).perform()
sleep(1000)
webdriver.ActionChains(driver).click(like_button).perform()

请注意,上面的图片元素可能不正确,因为html页面上有几个元素。确保选择正确的。