получите новый html после .click() с помощью selenium

#python #selenium #beautifulsoup #python-requests

#python #selenium #beautifulsoup #python-запросы

Вопрос:

Я использую selenium для перехода по ссылке, но я не могу получить новую таблицу. какой код я использую для извлечения новой страницы?

     df_list = []
    url = 'https://www.cartolafcbrasil.com.br/scouts/cartola-fc-2018/rodada-1' #  str(i)
    page = requests.get(url)
    soup = BeautifulSoup(page.text, 'html.parser')
    table = soup.find_all('table')[0]
    df = pd.read_html(str(table), encoding="UTF-8")

    driver = webdriver.PhantomJS(executable_path = 'C:\Python27\phantomjs-2.1.1-windows\bin\phantomjs')
    driver.get('https://www.cartolafcbrasil.com.br/scouts/cartola-fc-2018/rodada-1') 
    driver.find_element_by_xpath("/html[1]/body[1]/form[1]/div[1]/div[2]/div[3]/div[1]/div[1]/div[2]/div[1]/div[1]/div[2]/div[1]/div[2]/div[1]/table[1]/tbody[1]/tr[52]/td[1]/table[1]/tbody[1]/tr[1]/td[2]/a[1]").click()



    ?????
    table = soup.find_all('table')[0]
    df = pd.read_html(str(table), encoding="UTF-8")
  

Комментарии:

1. Вау, я уверен, что есть лучший способ получить желаемую информацию, чем driver.find_element_by_xpath("/html[1]/body[1]/form[1]/div[1]/div[2]/div[3]/div[1]/div[1]/div[2]/div[1]/div[1]/div[2]/div[1]/div[2]/div[1]/table[1]/tbody[1]/tr[52]/td[1]/table[1]/tbody[1]/tr[1]/td[2]/a[1]").click() ….

2. я могу стать лучше, но сначала я хочу получить новую таблицу

Ответ №1:

Если я понимаю ваш вопрос, это «Как мне получить HMTL из моего driver объекта для новой страницы, которую я загрузил». Ответ был бы driver.page_source

 driver.find_element_by_xpath("Some crazy shenanigans of an xpath").click()
html_from_page = driver.page_source
soup = bs4.BeautifulSoup(html_from_page, 'html.parser')
# more stuff
  

Комментарии:

1. Спасибо. Ошибка была в BeautifulSoup(html_from_page.text, ‘html.parser’) (html_from_page.text, ‘html.parser’)

Ответ №2:

Добро пожаловать в SO. Вот другой подход, при котором скрипт будет перебирать все таблицы (страницы) и получать данные.

 df_list = []
url = 'https://www.cartolafcbrasil.com.br/scouts/cartola-fc-2018/rodada-1' #  str(i)
page = requests.get(url)
soup = BeautifulSoup(page.text, 'html.parser')
table = soup.find_all('table')[0]
df = pd.read_html(str(table), encoding="UTF-8")

driver = webdriver.PhantomJS(executable_path = 'C:\Python27\phantomjs-2.1.1-windows\bin\phantomjs')
driver.get('https://www.cartolafcbrasil.com.br/scouts/cartola-fc-2018/rodada-1')
# get the number of pages and iterate each of them
numberOfPage = driver.find_element_by_xpath("(//tr[@class='tbpaging']//a)[last()]").text
for i in range(2,int(numberOfPage)):
    # click on each page link and then get the details
    driver.find_element_by_xpath("(//tr[@class='tbpaging']//a)["   i  "]").click()
    soup = BeautifulSoup(driver.page_source, 'html.parser')
    table = soup.find_all('table')[0]
    df = pd.read_html(str(table), encoding="UTF-8")