您能帮我提供我的代码吗?我想解析电话号码,但是我需要点击激活按钮。但这按钮带有标签,这对我来说是个问题。我该如何解决?
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
#from selenium.webdriver.common.touch_actions import TouchActions
#import org.openqa.selenium.interactions.Actions
#TouchActions.tap
def main():
driver = webdriver.Chrome()
remote = driver.get("https://www.olx.ua/uk/obyavlenie/68200jk71a-torpedo-pod-airbag-infiniti-g-07-14-infiniti-IDGRpUS.html#d97e6d976d;promoted")
bt_elem = driver.find_elements_by_id("postNewAdLink")
#print(bt_elem[0])
#driver.find_elements_by_class_name("contact-button").click()
#ActionChains(driver).move_to_element(bt_elem).perform().click()
#bt_elem.get(0).click()
#TouchActions.tap(bt_elem)
main()
错误:
Traceback (most recent call last):
File "C:\Users\radus\AppData\Local\Programs\Python\Python38\lib\subprocess.py", line 945, in __del__
self._internal_poll(_deadstate=_maxsize)
File "C:\Users\radus\AppData\Local\Programs\Python\Python38\lib\subprocess.py", line 1344, in _internal_poll
if _WaitForSingleObject(self._handle, 0) == _WAIT_OBJECT_0:
OSError: [WinError 6] Wrong descriptor
您的代码看起来不错...您的环境看起来很可疑。如果要冒一个危险(因为这是子进程模块的抱怨),则Selenium可能无法在PATH中找到chrome.exe。 Chrome会在此例外之前打开吗?
此错误消息...
File "C:\Users\radus\AppData\Local\Programs\Python\Python38\lib\subprocess.py", line 945, in __del__
self._internal_poll(_deadstate=_maxsize)
File "C:\Users\radus\AppData\Local\Programs\Python\Python38\lib\subprocess.py", line 1344, in _internal_poll
if _WaitForSingleObject(self._handle, 0) == _WAIT_OBJECT_0:
OSError: [WinError 6] Wrong descriptor
...表示subprocess.Popen()
命令存在错误。
根据Selenium 3.5.0-GeckoDriver 0.18.0-Python 3.6.1 : "OSError: [WinError 6] The handle is invalid" is observed while close() is called through Python PyDev (Eclipse) unittest module中的讨论,即使通过Python's self.driver.close()
模块调用unittest,也观察到了此问题。
This is because there is no stdin defined in the `service.py` file for the `subprocess.Popen()` command. Underwater the subprocess tries to create a handle which also looks for stdin under Windows this gets a bit tricky when using `Bash` or `cx_Freeze`. So, `stdin` was defined as well, and the crash is gone. Optionally you can also use:
FNULL = open(os.devnull, 'r')
subprocess.Popen(.... ,stdin=FNULL)
该解决方案是从Also define stdin or it will crash on Python + cx_Freeze: WindowsErro…拉取请求合并而来的,在Selenium v3.8.1
中可用
理想情况下,您需要确保:
driver.quit()
方法中调用tearDown(){}
以正常关闭并销毁WebDriver和Web Client实例。subprocess.Popen._cleanup() "The handle is invalid" error when some old process is gone