我是Selenium的新手,也是python的半新手。我试图让Selenium填写一个冗长的表格。该表单的第一部分包括在搜索栏中搜索自动弹出列表的列表。如果用户看到他们要查找的内容,则用户单击列表中的元素,该元素显示在搜索栏下方(请参阅下面的图片):
我尝试过以下代码(或以下代码的某种形式):
driver.implicitly_wait(30)
competitor = 'Bank of America Corp. (SNL P&C Group)'
comp_element =
driver.find_element_by_css_selector('<inputonkeydown="javascript:return
disableEnterKey(event);" onkeypress="javascript:return
disableEnterKey(event);" class="SNLTypeAheadSearchInput" type="text"
id="searchInputOnetypeAhead" name="q" size="65" placeholder="Enter a company
name, SNL group name, or NAIC #." onfocus=" var svc_url="";
svc_url="
/SNLWebPlatform/Content/UniversalSearch/UniversalSearchResponder.
aspx?
hasResults=
False&sets=-1&maxResults=15&additionalQuery=1,-1|-1,4,6";
InitSearchField(svc_url, 0, true, false,
SNLEntitySelectionTypeAhead_typeAhead.OnShowResultsFunction,
SNLEntitySelectionTypeAhead_typeAhead.OnNoResultsFunction,
SNLEntitySelectionTypeAhead_typeAhead.OnEnter, true,
SNLEntitySelectionTypeAhead_typeAhead.OnHighlight,
SNLEntitySelectionTypeAhead_typeAhead.OnNoHighlight,
SNLEntitySelectionTypeAhead_typeAhead.OnGetActiveResultsEvent, 0,
"searchInputOnetypeAhead", 400,
0);SNLEntitySelectionTypeAhead_typeAhead.
AfterSearchInit(this,"searchInputOnetypeAhead")"
autocomplete="off" style="color: rgb(148, 148, 148);">')
comp_element.send_keys(competitor)
comp_element.click()
我收到以下错误:
InvalidSelectorException: Message: invalid selector: An invalid or illegal selector was specified
(Session info: chrome=66.0.3359.139)
(Driver info: chromedriver=2.38.552522 (437e6fbedfa8762dec75e2c5b3ddb86763dc9dcb),platform=Windows NT 6.1.7601 SP1 x86_64)
我不确定为什么选择器不起作用。说实话,我不确定我是否应该通过css_selector选择这种元素。
有什么想法吗?
答案 0 :(得分:0)
这看起来不像css选择器,它看起来像整个输入源 - 但幸运的是,这意味着我们可以看到其他选项来定位。您是否尝试按类名或ID进行选择? Selenium提供了几种查找此输入以发送指定键的方法。
http://selenium-python.readthedocs.io/locating-elements.html
css选择器更像是这样:
comp_element = driver.find_element_by_css_selector('.SNLTypeAheadSearchInput')
或
comp_element = driver.find_element_by_css_selector('#searchInputOnetypeAhead')
或者您可以按类名找到元素:
comp_element = driver.find_element_by_class_name('SNLTypeAheadSearchInput')
或通过id:
comp_element = driver.find_element_by_id('searchInputOnetypeAhead')
希望这有帮助!