我正在尝试将一个硒脚本从火狐转换为Chrome。该代码在x86_64上与火狐和壁虎驱动程序一起工作。壁虎驱动程序不支持ARM,所以我试图转移到Chrome。
Chrome和chromedriver在使用驱动程序时导致异常。通过xpath('/*[@id]')查找元素。
。例外是selenium。常见的例外。WebDriverException:消息:无法访问chrome
。
问题是什么,我如何解决它?
这是测试程序。
$ cat test.py
#!/usr/bin/env python3
import sys
import selenium
from packaging import version
from selenium import webdriver
#from selenium.webdriver.firefox.options import Options
from selenium.webdriver.chrome.options import Options
def main():
#################################################
if version.parse(selenium.__version__) >= version.parse("3.0"):
opts = Options()
opts.headless = True
opts.binary_location = "/usr/bin/chromium"
#driver = webdriver.Firefox(options=opts)
driver = webdriver.Chrome(chrome_options=opts)
driver.maximize_window()
else:
#profile = webdriver.FirefoxProfile()
profile = webdriver.ChromeProfile()
profile.headless = True
profile.binary_location = "/usr/bin/chromium"
#driver = webdriver.Firefox(profile)
driver = webdriver.Chrome(profile)
driver.maximize_window()
agent = driver.execute_script('return navigator.userAgent')
print(agent)
#################################################
driver.get("https://complaints.donotcall.gov/complaint/complaintcheck.aspx")
driver.implicitly_wait(3)
ids = driver.find_elements_by_xpath('//*[@id]')
for ii in ids:
print(ii.get_attribute('id'))
#################################################
driver.quit()
if __name__ == "__main__":
main()
以下是尝试使用Chrome和chrome驱动程序枚举X路径时的异常。
$ ./test.py
Mozilla/5.0 (X11; Linux armv7l) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/72.0.3626.122 Safari/537.36
Traceback (most recent call last):
File "./test.py", line 50, in <module>
main()
File "./test.py", line 41, in main
ids = driver.find_elements_by_xpath('//*[@id]')
File "/usr/local/lib/python3.5/dist-packages/selenium/webdriver/remote/webdriver.py", line 410, in find_elements_by_xpath
return self.find_elements(by=By.XPATH, value=xpath)
File "/usr/local/lib/python3.5/dist-packages/selenium/webdriver/remote/webdriver.py", line 1007, in find_elements
'value': value})['value'] or []
File "/usr/local/lib/python3.5/dist-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
self.error_handler.check_response(response)
File "/usr/local/lib/python3.5/dist-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: chrome not reachable
(Session info: headless chrome=72.0.3626.122)
(Driver info: chromedriver=72.0.3626.122,platform=Linux 4.4.132+ armv7l)
此代码:
ids = driver.find_elements_by_xpath('//*[@id]')
for val in ids:
print(val.get_attribute('id'))
应该返回如下内容:
Head1
_fed_an_ua_tag
bdyComplaint
top
changeLang
topnav
navbtn
mobileChangeLang
Form1
__EVENTTARGET
__EVENTARGUMENT
__VIEWSTATE
__VIEWSTATEGENERATOR
__EVENTVALIDATION
StepOnePanel
StepOneEntryPanel
ErrorMsg
PhoneTextBox
DateOfCallTextBox
TimeOfCallDropDownList
ddlMinutes
PrerecordMessageYESRadioButton
PrerecordMessageNORadioButton
PhoneCallRadioButton
MobileTextMessageRadioButton
ddlSubjectMatter
spnTxtSubjectMatter
txtSubjectMatter
StepOneContinueButton
hdnBlockBack
hdnPhoneChecked
hdnCompanyChecked
hdnPhoneNumber
以下是版本号。
tinkerboard$ python3 --version
Python 3.5.3
tinkerboard$ /usr/bin/chromium --version
Chromium 72.0.3626.122 built on Debian 9.8, running on Debian 9.8
tinkerboard$ /usr/bin/chromedriver --version
ChromeDriver 72.0.3626.122
问题似乎是,Chrome浏览器的名称是不同操作系统和平台上的移动目标。这段代码避免了x86_64和LinuxARM上的异常:
def get_chrome():
"""
Helper function to locate chrome browser.
"""
if os.path.isfile('/usr/bin/chromium-browser'):
return '/usr/bin/chromium-browser'
if os.path.isfile('/usr/bin/chromium'):
return '/usr/bin/chromium'
if os.path.isfile('/usr/bin/chrome'):
return '/usr/bin/chrome'
if os.path.isfile('/usr/bin/google-chrome'):
return '/usr/bin/google-chrome'
return None
然后像这样使用它:
if version.parse(selenium.__version__) >= version.parse("3.0"):
opts = Options()
opts.binary_location = get_chrome()
opts.add_argument('--headless')
opts.add_argument('--no-sandbox')
opts.add_argument('--disable-dev-shm-usage')
driver = webdriver.Chrome(chrome_options=opts)
driver.maximize_window()
else:
profile = webdriver.ChromeProfile()
profile.headless = True
profile.binary_location = get_chrome()
driver = webdriver.Chrome(profile)
driver.maximize_window()
我正在删除一个网络应用程序,我需要找到一个特定的元素,但我不能用我的xpath找到它。这是我试图找到元素的HTML代码 我成功地找到了它,但是当我注意到id是自动生成的时,我陷入了困境。我试图解决这个问题,找到包含文字“名字”的标签,然后找到兄弟姐妹,但什么都没有。这是我的xpath:
我在python上有一个元素列表,我可以在index.html页面上以下拉列表的形式获得它,并将一个选定的值发送到另一个页面进行处理。问题是如何选择列表中的多个元素。我的意思是只有几个没有或库的元素?
下面是我为firefox浏览器初始化的selenium web驱动程序。 尽管我给出了隐式等待,但我没有等待元素。它会立即抛出not found异常。如果我放那么它工作正常,没有任何问题。但是把现在测试用例包含更多线程的任何地方。sleep比实际的测试用例代码低。有人能给我建议正确的方法吗?
问题内容: 我的任务是编写一个解析器以单击网站上的一个按钮,但我只能单击其中一个按钮而遇到问题。以下代码适用于除一个按钮之外的所有按钮。 这是html:http: //pastebin.com/6dLF5ru8 这是源html:http: //pastebin.com/XhsedGLb python代码: 我收到此错误。 根据赛富尔,我刚刚尝试等待相同的元素不可见异常: 问题答案: 如果你看一下页
我最近将selenium升级到最新版本(2.53),将firefox升级到最新版(45.0.1)。 我在相同的网站上运行相同的代码,但我突然有很多这样的例外: Web 驱动程序异常: 消息: 元素在点 (312, 8.816665649414062) 不可单击。其他元素将收到单击: 例如: 有什么我应该注意的新东西吗?我之前的python selenium版本相当旧,而且我在Firefox 38上
有人能帮我破解这个代码吗?当我使用流时,我得到了NoSuchElement异常。替代方案(注释)工作正常。我想知道为什么它抛出异常,如果与流实现。下面是代码供大家参考: