Selenium PhantomJS在课堂内单击按钮

时间:2017-06-04 14:52:50

标签: python selenium selenium-webdriver phantomjs

当我尝试使用selenium与webdriver Phantonjs单击按钮时,我遇到了问题。我的代码是这样的:

from selenium import webdriver

driver = webdriver.PhantomJS()
driver.set_window_size(1120, 550)
driver.get("https://www.instagram.com/nike/")
dt = driver.find_elements_by_class_name("a_8imhp _glz1g")

for i in dt:
    i.click()

driver.quit()

错误是:

  File "test.py", line 8, in <module>
    dt = driver.find_elements_by_class_name("a_8imhp _glz1g")
  File "/usr/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 427, in find_elements_by_class_name
    return self.find_elements(by=By.CLASS_NAME, value=name)
  File "/usr/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 782, in find_elements
    'value': value})['value']
  File "/usr/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 238, in execute
    self.error_handler.check_response(response)
  File "/usr/lib/python3.6/site-packages/selenium/webdriver/remote/errorhandler.py", line 193, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: {"errorMessage":"Compound class names not permitted","request":{"headers":{"Accept":"application/json","Accept-Encoding":"identity","Connection":"close","Content-Length":"103","Content-Type":"application/json;charset=UTF-8","Host":"127.0.0.1:41380","User-Agent":"Python-urllib/3.6"},"httpVersion":"1.1","method":"POST","post":"{\"using\": \"class name\", \"value\": \"a_8imhp _glz1g\", \"sessionId\": \"fba6d030-4934-11e7-8712-9506860019f4\"}","url":"/elements","urlParsed":{"anchor":"","query":"","file":"elements","directory":"/","path":"/elements","relative":"/elements","port":"","host":"","password":"","user":"","userInfo":"","authority":"","protocol":"","source":"/elements","queryKey":{},"chunks":["elements"]},"urlOriginal":"/session/fba6d030-4934-11e7-8712-9506860019f4/elements"}}
Screenshot: available via screen

1 个答案:

答案 0 :(得分:1)

您不能将多个类名传递给find_elements_by_class_name()。您可以尝试传递单个名称,例如

driver.find_elements_by_class_name("a_8imhp")

或使用复杂的选择器,例如XPathCSS选择器

只需替换此

dt = driver.find_elements_by_class_name("a_8imhp _glz1g")

用这个

dt = driver.find_elements_by_css_selector(".a_8imhp._glz1g")

或者

dt = driver.find_elements_by_xpath("//*[@class='a_8imhp _glz1g')