如何使用PhantomJS与Selenium定位复合类名a标签并点击?
解决Selenium定位复合类名链接的问题
我明白你现在遇到的麻烦了——要点击的a标签没有可用于link_text的显示文本,用class_name定位又因为是复合类名(多个空格分隔的类)报错,确实挺头疼的。下面给你几个可行的解决办法:
先理清楚报错原因
Selenium的find_element_by_class_name方法只支持单个类名,不能直接传入带空格的复合类(比如jobs-wrapper no-line w-inline-block w-clearfix),这就是你收到"Compound class names not permitted"报错的核心原因。而link_text需要链接的可见文本,这里也用不了,所以得换用CSS选择器或者XPath来定位。
方案1:用CSS选择器定位
CSS选择器可以完美处理复合类名,只需要把类名用.连接起来就行,或者结合父元素缩小定位范围,避免误选其他元素:
from selenium import webdriver driver = webdriver.PhantomJS() driver.set_window_size(1120, 550) driver.get("https://myurl.com/") # 方式A:直接定位带所有复合类的a标签 target_link = driver.find_element_by_css_selector("a.jobs-wrapper.no-line.w-inline-block.w-clearfix") target_link.click() # 方式B:结合父元素缩小范围(更推荐,避免页面其他地方有相同类的元素) # target_link = driver.find_element_by_css_selector("div.w-dyn-item a.jobs-wrapper") print(driver.current_url) driver.quit()
方案2:用XPath定位
如果你更习惯用XPath,也可以通过a标签的href属性、或者父元素的class来定位:
from selenium import webdriver driver = webdriver.PhantomJS() driver.set_window_size(1120, 550) driver.get("https://myurl.com/") # 方式A:通过href属性精准定位 target_link = driver.find_element_by_xpath("//a[@href='/project/soft']") target_link.click() # 方式B:通过父元素的class定位(适合定位第一个符合结构的链接) # target_link = driver.find_element_by_xpath("//div[@class='w-dyn-item']/a") print(driver.current_url) driver.quit()
额外提醒
你原来代码里的driver.find_element_by_link_text("//a href").click()是错误用法——link_text参数需要的是链接的可见文本内容,不是XPath表达式,这也是之前无法生效的原因之一。
内容的提问来源于stack exchange,提问作者Markus
相关产品推荐
相关产品推荐

