Also ich hab jetzt nochmal ein wenig gegoogelt. Es ist wohl wirklich so das beim Seitenwechsel die Bezüge zur verlassenen Seite verloren gehen. Und man diese wieder irgendwie neu setzen muss ...
Ich habe aber leider noch nicht gefunden wie man sie wieder neu belegt.
Hatte gedachte diese Zeilen einfach zu wiederholen würde helfen, hat es aber nicht ....
Code: Alles auswählen
match_table = driver.find_element_by_id("table-matches")
rows = match_table.find_elements_by_tag_name("tr")
Der komplette Code sieht derzeit so aus:
Code: Alles auswählen
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from openpyxl import Workbook
import pandas as pd
wb = Workbook()
ws = wb.active
def iter_stripped_texts(elements, start_index=None, end_index=None):
return (element.text.strip() for element in elements[slice(start_index, end_index)])
#def main():
driver = webdriver.Chrome('C:\webdrivers\Chromedriver.exe')
driver.get("https://www.oddsportal.com/matches/tennis/")
loginbtn = driver.find_element_by_xpath('//*[@id="user-header-r2"]/div[1]/button/span/span')
loginbtn.click()
username = driver.find_element_by_xpath('//*[@id="login-username1"]')
username.send_keys("xxx")
password = driver.find_element_by_xpath('//*[@id="login-password1"]')
password.send_keys("xxx")
login = driver.find_element_by_xpath('//*[@id="col-content"]/div[3]/div/form/div[3]/button/span/span')
login.click()
tomorrow = driver.find_element_by_xpath('//*[@id="col-content"]/div[3]/div/div/span/a[3]')
tomorrow.click()
# tabelle mit den Matches
match_table = driver.find_element_by_id("table-matches")
rows = match_table.find_elements_by_tag_name("tr")
# Liste für Spielerurls anlegen
urls = []
for row in rows:
if "dark" in row.get_attribute("class"):
# dark: alle Zeilen die den Autragungsort enthalten
cells = row.find_elements_by_tag_name("a")
data_field_country = cells[0].text.replace("\n", "").strip()
data_field_tournament = cells[1].text.replace("\n", "").strip()
# usw.
elif "dark" not in row.get_attribute("class"):
cells = row.find_elements_by_tag_name("td")
data_field_time = cells[0].text.replace("\n", "").strip()
data_field_player = cells[1].text.replace("\n", "").strip()
# erstes a-Tag:
a_tag = cells[1].find_elements_by_tag_name("a")[0]
# href Attribut
data_field_player_url = a_tag.get_attribute("href")
if (
":" in cells[2].text.replace("\n", "").strip()
or "w.o." in cells[2].text.replace("\n", "").strip()
or "int." in cells[2].text.replace("\n", "").strip()
):
data_field_homeodd = cells[3].text.replace("\n", "").strip()
data_field_awayodd = cells[4].text.replace("\n", "").strip()
else:
data_field_homeodd_avg = cells[2].text.replace("\n", "").strip()
data_field_awayodd_avg = cells[3].text.replace("\n", "").strip()
# die Seite laden
driver.get(data_field_player_url)
# jetzt kommt der Teil wo du die Spielerseite auswertest
for row in driver.find_elements_by_css_selector("#odds-data-table > div:nth-child(1) > table > tbody > tr"):
if not "wool" in row.get_attribute("class"):
cells = row.find_elements_by_tag_name("td")
data_field_bookie, data_field_home_odd, data_field_away_odd, data_field_payout = iter_stripped_texts(cells, 0, 4)
print([data_field_country , data_field_tournament , data_field_time , data_field_player , data_field_homeodd_avg , data_field_awayodd_avg , data_field_player_url , data_field_bookie , data_field_home_odd , data_field_away_odd , data_field_payout])
# ws.append([data_field_country , data_field_tournament , data_field_time , data_field_player , data_field_homeodd_avg , data_field_awayodd_avg , data_field_player_url , data_field_bookie , data_field_home_odd , data_field_away_odd , data_field_payout])
# wieder zurück auf die vorige Seite
driver.get("https://www.oddsportal.com/matches/tennis/")
match_table = driver.find_element_by_id("table-matches")
rows = match_table.find_elements_by_tag_name("tr")
Hat jemand eine Idee wie ich wenn ich auf die Ursprungsseite zurückkehre wieder zurück in meine eigentlich Schleife komme um die Zeilen weiter durchzugehen?