2016-07-05 10 views
-2

私は、ajaxで満たされたサイトをスクラップしようとすると難しい問題に遭遇しました。多くの苦労の末、サイトから1つのファイルをダウンロードするようにブラウザを自動化することができました。残念ながら、手元にあるタスクでは、メインページを離れてファイルにアクセスする必要があります。私の問題は、ドライバオブジェクトのリストを取得した後、一度ページを離れると、それが古くなってしまうことです。私は整数をインデックスとして格納することでこれを回避しようとしました。ここでは以下の私のコードは次のとおりです。ページを離れた後、セレンのwebdriverオブジェクトが古くなるのを防ぐ方法はありますか?

while loop: 
    open_folders() 
    drFolder = driver.find_elements_by_xpath("//*[@data-rights='16777215']") 
    drSurveys = driver.find_elements_by_xpath("//*[@data-rights='16711680']") 
    inner_loop(create_list(drFolder, drSurveys), accum) 
    accum += 1 

答えて

0

私はリストを更新するマップ機能を使って、この問題を回避することができました:

while loop: 
    open_folders() 
    drSurveys = driver.find_elements_by_xpath("//*[@data-rights='16711680']") 
    elecontainer = driver.find_elements_by_xpath("//*[@data-rights='16711680']") 
    map(lambda: driver.find_elements_by_xpath("//*[@data-rights='16711680']"), elecontainer) 
    if elecontainer[accum].is_displayed(): 
     ActionChains(driver).move_to_element(elecontainer[accum]).click(elecontainer[accum]).perform() 
     if check_jquery(): 
      inner_loop() 
    accum += 1 

私は無名関数やマップ機能での経験を持っていませんでした。 私は後で戻ってきて、次のように更新しました:

while loop: 

    open_folders() 

    elecontainer = driver.find_elements_by_css_selector("a[data-rights^='167']") 

    map(lambda: driver.find_elements_by_css_selector("a[data-rights^='167']"), elecontainer) 

    if elecontainer[accum].is_displayed(): 

     ActionChains(driver).move_to_element(elecontainer[accum]).click(elecontainer[accum]).perform() 

     if check_jquery(): 

      urlstore = driver.current_url 

      inner_loop() 

    accum += 1 
関連する問題