1

このサイトのすべての App.No をスクレイピングしています: WIPO。この Web サイトからコンテンツをスクレイピングしていますが、コードをクリックして次のページに移動しても、必要な最終ページ (100) をループできないようです。また、私が引き出すコンテンツは、最初のページのコンテンツの繰り返しです。私が経験した最も遠いループは、エラー メッセージがポップアップする前に 12 ページです。そしてなぜか、同じコードでも毎回違うページで止まるのでは?

StaleElementReferenceException: メッセージ: 古い要素参照: 要素がページ ドキュメントに添付されていません

これは、パスが見つからなくなったことを意味しますが、URL を変更してもウェブサイトにアクセスできませんが、別のページのパスを調べましたが、変更されていないため、移動方法がわかりません。前方。私のコードは次のようになります。誰かが助けることができれば?

class autoScraper():
def __init__(self,ep="./chromedriver",headless=False):
    options = webdriver.ChromeOptions()
    if headless: options.add_argument("--headless");
    options.add_argument("--start-maximized")
    self.driver= webdriver.Chrome(executable_path=ep,options=options);


def closeDriver(self):
    self.driver.close()
    
def next_page(self):
    # btn=self.driver.find_elements_by_xpath('/html/body/div[2]/div[4]/div/div[1]/div[2]/div/form[2]/div/div[2]/div/a/span')
    btn=self.driver.find_elements_by_css_selector('a[title="Next Page"]')

    if len(btn)>0:
        btn[0].click()
        
def connector(self,a="https://patentscope.wipo.int/search/en/search.jsf"):
    success = False;
    try:
        self.driver.get(a)
        self.driver.find_element_by_xpath('/html/body/div[2]/div[5]/div/div[2]/form/div/div[1]/div[2]/div/div/div[1]/div[2]/button').click()
        self.driver.find_element_by_xpath('/html/body/div[2]/div[4]/div/div[1]/div[2]/div/form[1]/div/div[1]/div[2]/div/select[1]').click() # cilck to select the num of showing IPs on a page.
        self.driver.find_element_by_xpath('/html/body/div[2]/div[4]/div/div[1]/div[2]/div/form[1]/div/div[1]/div[2]/div/select[1]/option[4]').click()
        self.driver.find_element_by_xpath('/html/body/div[2]/div[4]/div/div[1]/div[2]/div/form[1]/div/div[1]/div[1]/div/select[1]/option[2]').click()
        self.driver.find_element_by_xpath('/html/body/div[2]/div[4]/div/div[1]/div[2]/div/form[1]/div/div[1]/div[2]/div/select[1]/option[4]').click()
        self.driver.find_element_by_xpath('/html/body/div[2]/div[4]/div/div[1]/div[2]/div/form[1]/div/div[1]/div[3]/div/select[1]/option[2]').click()
        success = True     
    except Exception as e:
        print(e)
    if success:
        return success
    
def getPCT(self):
    PCT = []
    for i in range(1,201):
        no = self.driver.find_element_by_xpath('/html/body/div[2]/div[4]/div/div[1]/div[2]/div/form[2]/div/div[1]/div/div/table/tbody/tr[%d]/td/div/div[2]/div/div[1]/span[2]/span[2]' %(i)).text
        PCT.append(no)
    
    return PCT   

def clickNextPage(self):
    self.driver.find_element_by_css_selector('a[title="Next Page"]').click()
    
if __name__ == '__main__':
   PCT=[]
   driver = autoScraper()
   if driver.connector():
       sleep(10)
       while i<100:
           i=i+1
           PCT=driver.getPCT()
           driver.clickNextPage()
       driver.next_page()
   print('The num of scraped PCTs:',len(PCT))
   try:
       os.system('mkdir ./download/')
   except:
       print('The directory is already existed.')
   finally:
       with open('./download/pct.txt','a') as f:
           for line in PCT:
               f.write(line+'\n')
       print('urls writen to ./download/pct.txt')
        

   driver.closeDriver()
4

0 に答える 0