使用Selenium和Python填写搜索表单

时间:2018-05-22 19:55:37

标签: python-3.x selenium-chromedriver

我是Selenium的新手,也是python的半新手。我试图让Selenium填写一个冗长的表格。该表单的第一部分包括在搜索栏中搜索自动弹出列表的列表。如果用户看到他们要查找的内容,则用户单击列表中的元素,该元素显示在搜索栏下方(请参阅下面的图片):

enter image description here

enter image description here

enter image description here

我尝试过以下代码(或以下代码的某种形式):

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=&quot;&quot;; 
svc_url=&quot; 
/SNLWebPlatform/Content/UniversalSearch/UniversalSearchResponder. 
aspx? 
hasResults= 
False&amp;sets=-1&amp;maxResults=15&amp;additionalQuery=1,-1|-1,4,6&quot;; 
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, 
&quot;searchInputOnetypeAhead&quot;, 400, 
0);SNLEntitySelectionTypeAhead_typeAhead. 
AfterSearchInit(this,&quot;searchInputOnetypeAhead&quot;)"  
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选择这种元素。

有什么想法吗?

1 个答案:

答案 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')

希望这有帮助!