получить новый HTML после .click () с селеном - PullRequest
0 голосов
/ 30 марта 2019

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

    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")

Ответы [ 2 ]

1 голос
/ 30 марта 2019

Если я понимаю ваш вопрос, это «Как я могу получить 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
0 голосов
/ 30 марта 2019

Добро пожаловать на 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")
...