Селен навигация через селен продолжайте цикл (python) - PullRequest
0 голосов
/ 06 января 2020

Я только начал использовать селен, чтобы очистить таблицу от веб-страницы. Итак, я реализовал навигацию по веб-странице, используя селен. Но результат продолжает работать, когда я запускаю код. Я уверен, что я написал код неправильно. Что я должен исправить код, чтобы навигация селен работал?

import requests
    import csv
    from bs4 import BeautifulSoup as bs
    from selenium import webdriver

browser=webdriver.Chrome()
browser.get('https://dir.businessworld.com.my/15/posts/16-Computers-The-Internet')

# url = requests.get("https://dir.businessworld.com.my/15/posts/16-Computers-The-Internet/")
soup=bs(browser.page_source)

filename = "C:/Users/User/Desktop/test.csv"
csv_writer = csv.writer(open(filename, 'w'))

pages_remaining = True

while pages_remaining:
    for tr in soup.find_all("tr"):
        data = []
        # for headers ( entered only once - the first time - )
        for th in tr.find_all("th"):
            data.append(th.text)
        if data:
            print("Inserting headers : {}".format(','.join(data)))
            csv_writer.writerow(data)
            continue

        for td in tr.find_all("td"):
            if td.a:
                data.append(td.a.text.strip())
            else:
                data.append(td.text.strip())
        if data:
            print("Inserting data: {}".format(','.join(data)))
            csv_writer.writerow(data)

try:
    #Checks if there are more pages with links
    next_link = driver.find_element_by_xpath('//*[@id="content"]/div[3]/table/tbody/tr/td[2]/table/tbody/tr/td[6]/a ]')
    next_link.click()
    time.sleep(30)
except NoSuchElementException:
    rows_remaining = False

1 Ответ

1 голос
/ 06 января 2020

Проверьте, есть ли на странице next button, а затем нажмите «Выйти из», пока l oop.

if len(browser.find_elements_by_xpath("//a[contains(.,'Next')]"))>0:
      browser.find_element_by_xpath("//a[contains(.,'Next')]").click()
else:
      break

Нет необходимости использовать time.sleep() вместо использования WebDriverWait ()


Код :

import csv
from bs4 import BeautifulSoup as bs
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

browser=webdriver.Chrome()
browser.get('https://dir.businessworld.com.my/15/posts/16-Computers-The-Internet')
WebDriverWait(browser, 10).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "table.postlisting")))
soup=bs(browser.page_source)

filename = "C:/Users/User/Desktop/test.csv"
csv_writer = csv.writer(open(filename, 'w'))

pages_remaining = True

while pages_remaining:
    WebDriverWait(browser,10).until(EC.visibility_of_element_located((By.CSS_SELECTOR,"table.postlisting")))
    for tr in soup.find_all("tr"):
        data = []
        # for headers ( entered only once - the first time - )
        for th in tr.find_all("th"):
            data.append(th.text)
        if data:
            print("Inserting headers : {}".format(','.join(data)))
            csv_writer.writerow(data)
            continue

        for td in tr.find_all("td"):
            if td.a:
                data.append(td.a.text.strip())
            else:
                data.append(td.text.strip())
        if data:
            print("Inserting data: {}".format(','.join(data)))
            csv_writer.writerow(data)


    if len(browser.find_elements_by_xpath("//a[contains(.,'Next')]"))>0:
        browser.find_element_by_xpath("//a[contains(.,'Next')]").click()
    else:
        break
...