硒不会返回所有结果。如何解决这个问题?

时间:2019-07-02 20:14:04

标签: python-3.x selenium selenium-chromedriver

我正在尝试从表here中的所有79072条记录中获取列,问号,部,成员和主题字段。但是我从该表中抓取数据的代码返回的结果不完整。

在网页中,显示所有记录的按钮已损坏,因此我要让脚本单击“下一步”按钮并循环进行直到检索到所有记录,以检索记录。但是,每次我运行该脚本时,它都会在检索随机数量的记录后中途退出。我认为这可能是因为页面有时需要花费更长的时间加载,所以,我尝试增加脚本在尝试抓取数据之前必须等待的秒数,但这根本没有帮助。

这是我的剧本。

 url = "http://loksabhaph.nic.in/Questions/qsearch15.aspx?lsno=16"
 chrome_options = Options()
 chrome_options.add_argument("--headless")
 driver = webdriver.Chrome(chrome_options=chrome_options)
 driver.implicitly_wait(3)
 driver.get(url)
 while True:
     try:
         qno = driver.find_elements_by_xpath('//*[@id="ContentPlaceHolder1_tblMember"]/tbody/tr/td/table/tbody/*/td[1]/a[2]')
         qty = driver.find_elements_by_xpath('//*[@id="ContentPlaceHolder1_tblMember"]/tbody/tr/td/table/tbody/*/td[2]/a[2]')
         min = driver.find_elements_by_xpath('//*[@id="ContentPlaceHolder1_tblMember"]/tbody/tr/td/table/tbody/*/td[4]/a[2]')
         mem = driver.find_elements_by_xpath('//*[@id="ContentPlaceHolder1_tblMember"]/tbody/tr/td/table/tbody/*/td[5]/a[2]')
         sub = driver.find_elements_by_xpath('//*[@id="ContentPlaceHolder1_tblMember"]/tbody/tr/td/table/tbody/*/td[6]/a[2]')
         for i in range(4):
             print(qno[i].text + "\t" + qty[i].text + "\t" + min[i].text + "\t" + mem[i].text + "\t" + sub[i].text)
         driver.find_element_by_id("ContentPlaceHolder1_cmdNext").click()
         time.sleep(5)
     except:
         break
 driver.quit()

如何确保我的脚本检索所有数据?

也请告知我是否还有另一种方法来检索此数据,或者您对代码本身有任何一般性的评论。我正在教自己如何编码,希望您能提供反馈。

编辑:基于来自pcalkins和supputuri的指针,我添加了“元素的存在”并捕获了异常。这是更新的脚本。

while True:
    try:
        qno = driver.find_elements_by_xpath('//*[@id="ContentPlaceHolder1_tblMember"]/tbody/tr/td/table/tbody/*/td[1]/a[2]')
        qty = driver.find_elements_by_xpath('//*[@id="ContentPlaceHolder1_tblMember"]/tbody/tr/td/table/tbody/*/td[2]/a[2]')
        min = driver.find_elements_by_xpath('//*[@id="ContentPlaceHolder1_tblMember"]/tbody/tr/td/table/tbody/*/td[4]/a[2]')
        mem = driver.find_elements_by_xpath('//*[@id="ContentPlaceHolder1_tblMember"]/tbody/tr/td/table/tbody/*/td[5]/a[2]')
        sub = driver.find_elements_by_xpath('//*[@id="ContentPlaceHolder1_tblMember"]/tbody/tr/td/table/tbody/*/td[6]/a[2]')
        for i in range(len(qno)):
            print(qno[i].text + "\t" + qty[i].text + "\t" + min[i].text + "\t" + mem[i].text + "\t" + sub[i].text)
        driver.find_element_by_id("ContentPlaceHolder1_cmdNext").click()
        myElem = WebDriverWait(driver, 300).until(EC.presence_of_element_located((By.ID, 'ContentPlaceHolder1_tblMember')))
#        time.sleep(5)
    except Exception as e:
        print(e)

当我运行这个更新的脚本时,我设法检索了大约27000条记录,之后我得到了它,

  

消息:超时
   (会话信息:headless chrome = 74.0.3729.157)
   (驱动程序信息:chromedriver = 74.0.3729.6(255758eccf3d244491b8a1317aa76e1ce10d57e9-refs / branch-heads / 3729 @ {#29}),platform = Linux 4.13.0-36-generic x86_64)

0 个答案:

没有答案