我正面临使用xpath / css选择器进行Goibibo网站城市选择的selenium webdriver脚本的问题

时间:2017-03-09 05:57:52

标签: selenium webdriver

在使用xpath/css选择器面临问题从网站选择城市时,让我知道解决方案

List<WebElement> frm=driver.findElements(By.cssSelector("html body div#gi_midcontent.col-md-12.col-sm-12.col-xs-12.pad0 div#gi_mid_in div#viewContainer div#flights-home-view.homeContainer.col-md-12.col-sm-12.col-xs-12.myPropDisplay div.homeContainerInner div#searchWidgetNew.blueBg.homeWidgetWrap.posRel form#gi_search div#searchWidgetCommon div.formWrap.padT15 div#source_st.fl_shAutosgBox.col-md-5.col-sm-5.col-xs-12.autoSuggestBox.marginB10 input#gi_source_st.form-control.inputTxtLarge.fromTxt.posRel"));

2 个答案:

答案 0 :(得分:0)

一些事情。

  1. 在此处查看selenium文档。http://www.seleniumhq.org/docs/03_webdriver.jsp
  2. 了解如何使用不同的定位器策略来识别特定定位器。
  3. 不要问这个问题只是因为某些东西不起作用,花一些时间在那上面。
  4. 访问此页面以了解如何提问以便您可以获得答案。
  5. 我之前提到的原因是你的css定位器看起来很可怜​​,你试图识别的定位器同时具有名称和id,如果你现在如何使用定位器,你可以想出来。

答案 1 :(得分:0)

问题中指定的选择器混合了id和class。但是,看一下网站,建议的城市列表不是作为一组输入元素提供的,而是从AJAX中提取的。

使用Postman工具在此URL上发送GET查询,您可以获取带有对象列表的JSON数据。 json的属性[&#34;数据&#34;] [&#34; r&#34;] [索引] [&#34; xtr&#34;] [&#34; cn&#34;]似乎是一个字符串&#34; CityName&#34;。此API不需要身份验证,因此也可以使用Java HttpClient获取它。

https://voyager.goibibo.com/api/v1/flights_search/find_node_by_name_v2/?search_query=hint&limit=10 

样本结果:

{
  "data": {
    "r": [
      {
        "s_sc": 5055001,
        "xtr": {
          "cn": "Beica",
          "cid": "1918715907401915921",
          "cc": "ET",
          "dis_type": "ldis",
          "ar": 0,
          "eid": "7717797727439208389",
          "cnt_n": "Ethiopia",
          "cnt_id": "1871100673297067773",
          "dis": 0
        },
        "iata": "BEI",
        "n": "Beica Airport",
        "mt": "Beica Airport ### Beica",
        "t": "airport",
        "_id": "7717797727439208389",
        "ct": {
          "_id": "1918715907401915921",
          "n": "Beica"
        }
      },
      ...
    ]
  }
}

请替换&#34;提示&#34;使用您的查询字符串,例如,一个开头的字母。另请注意,在一个查询中(页面)限制不能大于50。