Python 3.6环境下使用Selenium无法点击元素的问题求助
Hey there! Let's work through why your click action on the "Load more comments" button isn't landing successfully with Selenium in Python 3.6. First, let's note that your current code targets list items (li) instead of the actual button element you mentioned—this is likely part of the issue. Here are some actionable fixes to try:
1. First, Target the Correct Button Element
Your target element is the <a> tag with classes _m3m1c _1s3cd and role "button". Since Selenium's find_element_by_class_name only accepts a single class name, use either CSS Selector or XPath to pinpoint it accurately:
# Using CSS Selector load_more_btn = browser.find_element_by_css_selector('a._m3m1c._1s3cd[role="button"]') # OR Using XPath (matches the exact text too) load_more_btn = browser.find_element_by_xpath('//a[@class="_m3m1c _1s3cd" and text()="Load more comments"]')
2. Use Explicit Wait to Avoid Timing Issues
Most often, click failures happen because the element isn't fully loaded yet. Use WebDriverWait to wait until the button is clickable before attempting to interact with it:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By # Wait up to 10 seconds for the button to be clickable load_more_btn = WebDriverWait(browser, 10).until( EC.element_to_be_clickable((By.CSS_SELECTOR, 'a._m3m1c._1s3cd[role="button"]')) ) load_more_btn.click()
3. Try ActionChains (But Target the Button, Not List Items)
If direct clicking still doesn't work, use ActionChains to move to the button first (useful if the element is near the edge of the viewport or has hover interactions):
from selenium.webdriver.common.action_chains import ActionChains load_more_btn = WebDriverWait(browser, 10).until( EC.visibility_of_element_located((By.CSS_SELECTOR, 'a._m3m1c._1s3cd[role="button"]')) ) ActionChains(browser).move_to_element(load_more_btn).click().perform()
4. Fallback to JavaScript Click
If the button is hidden behind another element or has restrictive event listeners, use JavaScript to trigger the click directly:
load_more_btn = WebDriverWait(browser, 10).until( EC.presence_of_element_located((By.CSS_SELECTOR, 'a._m3m1c._1s3cd[role="button"]')) ) browser.execute_script("arguments[0].click();", load_more_btn)
Quick Checks to Rule Out Edge Cases
- Is the button inside an iframe? If yes, switch to the iframe first with
browser.switch_to.frame(iframe_element)before locating the button. - Is the button off-screen? Use
browser.execute_script("arguments[0].scrollIntoView();", load_more_btn)to scroll it into view before clicking.
内容的提问来源于stack exchange,提问作者Saman Bahramian

