【发布时间】:2019-09-25 21:46:28
【问题描述】:
我正在尝试自动将文章发布到我的博客,该博客由 Naver 使用 Selenium 提供服务。
问题是我无法将文本放入编辑器。
我曾尝试使用send_keys(),但它不起作用。
这是我尝试过的 Python Selenium 代码。
driver = webdriver.Chrome('./chromedriver')
driver.get('https://section.blog.naver.com')
driver.find_element_by_xpath("//a[@class = 'login_button']").click()
time.sleep(1)
driver.execute_script("document.getElementsByName('id')[0].value=\'" + user_id + "\'")
driver.execute_script("document.getElementsByName('pw')[0].value=\'" + password + "\'")
driver.find_element_by_xpath("//input[@title = 'Sign in']").click()
time.sleep(1)
driver.find_element_by_xpath("//a[@bg-nclick = 'hmp*s.write']").click()
time.sleep(1)
driver.switch_to.window(driver.window_handles[-1])
driver.switch_to.frame('mainFrame')
driver.find_element_by_xpath("/html/body/div[1]/div/div[2]/div[2]/div/div/div/div[1]/article/div/header/button").click()
driver.find_element_by_xpath("/html/body/div[1]/div/div[2]/div[2]/div/div/div/div[1]/div[2]/section/article/div[1]/div").click()
#This line is being a problem.
driver.find_element_by_xpath("/html/body/div[1]/div/div[2]/div[2]/div/div/div/div[1]/div[2]/section/article/div[1]/div[1]/div/div/p/span").send_keys('Heading1')
它会抛出如下异常。
---------------------------------------------------------------------------
ElementNotInteractableException Traceback (most recent call last)
<ipython-input-50-e483e0f23c79> in <module>
25 driver.find_element_by_xpath("/html/body/div[1]/div/div[2]/div[2]/div/div/div/div[1]/article/div/header/button").click()
26 driver.find_element_by_xpath("/html/body/div[1]/div/div[2]/div[2]/div/div/div/div[1]/div[2]/section/article/div[1]/div").click()
---> 27 driver.find_element_by_xpath("/html/body/div[1]/div/div[2]/div[2]/div/div/div/div[1]/div[2]/section/article/div[1]/div[1]/div/div/p/span").send_keys('Heading1')
28 #driver.execute_script("document.getElementByXpath('/html/body/div[1]/div/div[2]/div[2]/div/div/div/div[1]/div[2]/section/article/div[1]/div[1]/div/div/p/span').value='Heading1'")
~/anaconda3/lib/python3.7/site-packages/selenium/webdriver/remote/webelement.py in send_keys(self, *value)
477 self._execute(Command.SEND_KEYS_TO_ELEMENT,
478 {'text': "".join(keys_to_typing(value)),
--> 479 'value': keys_to_typing(value)})
480
481 # RenderedWebElement Items
~/anaconda3/lib/python3.7/site-packages/selenium/webdriver/remote/webelement.py in _execute(self, command, params)
631 params = {}
632 params['id'] = self._id
--> 633 return self._parent.execute(command, params)
634
635 def find_element(self, by=By.ID, value=None):
~/anaconda3/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py in execute(self, driver_command, params)
319 response = self.command_executor.execute(driver_command, params)
320 if response:
--> 321 self.error_handler.check_response(response)
322 response['value'] = self._unwrap_value(
323 response.get('value', None))
~/anaconda3/lib/python3.7/site-packages/selenium/webdriver/remote/errorhandler.py in check_response(self, response)
240 alert_text = value['alert'].get('text')
241 raise exception_class(message, screen, stacktrace, alert_text)
--> 242 raise exception_class(message, screen, stacktrace)
243
244 def _value_or_default(self, obj, key, default):
ElementNotInteractableException: Message: element not interactable
我知道“ElementNotInteractableException:消息:元素不可交互”是什么意思。
尽管我尝试了所有可能的 Xpath 来找到我可以使用的元素send_keys(),但我失败了;紧随其后的是同样的例外。
所以我查看了网络编辑器的源代码。它通过使用 iframe 和许多具有自动生成的 id 的元素以一种不熟悉的方式工作。这就是编辑器的样子。
这是一个简短的视频,可能会让您更了解编辑器的工作原理。
如果您知道我应该尝试什么,请告诉我。
*编辑
正如您在 python 代码中看到的,我正在考虑使用 javascript 来实现网络自动化。然而,问题是span 元素我怀疑它作为input 元素工作,具有自动生成的随机ID。唯一的可能是选择它使用 Xpath,但不幸的是,Javascript 没有 getElementByXpath()。
【问题讨论】: