J'ai un problème d'impression sur la même ligne, les données du tableau. Bien sûr, je pourrais simplement m'identifier à css_selector ("td") , mais cela s'imprime:
Nom
Adresse
Ville / État
Téléphone dans la même colonne
alors que j'essaye de créer:
Nom, adresse, ville / état, téléphone à la même ligne
HTML: (voir photo ci-jointe)
Cela semble être un problème si stupide à raccrocher ... mais Je suis bloqué depuis un certain temps et je n'ai pas pu isoler les balises .
Code:
for x in link:
driver.get(x)
try:
i = 0
while 0 < 20:
name = driver.find_elements_by_xpath("/html/body/div[2]/div/div[1]/div/div/table/tbody/tr/td[1]/table/tbody/tr['"+str(i)+"']/td/strong")
if name[i].is_displayed():
print(name[i].text)
i = i + 1
else:
i = i + 1
except(NoSuchElementException,JavascriptException, IndexError):
continue
4 Réponses :
Si vous parvenez à identifier l'élément Nom : Adresse : Ville / État : Téléphone : parent avec css-selectors css_selector (" td ") pour imprimer Nom , Adresse strong >, Ville / État et Téléphone , vous pouvez utiliser les Stratégies de localisation :
print(driver.execute_script('return arguments[0].lastChild.textContent;', WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "td")))).strip())
print(driver.execute_script('return arguments[0].childNodes[5].textContent;', WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "td")))).strip())
print(driver.execute_script('return arguments[0].childNodes[3].textContent;', WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "td")))).strip())
print(WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "td>strong"))).get_attribute("innerHTML"))
Le BeautifulSoup peut également être utilisé dans ce scénario. et vérifiez la condition si la balise 'br' est présente, puis ignorez ajoute une nouvelle ligne
\ n au texte du , vous le séparez ou le supprimez < pré> XXX
votes
>>>from bs4 import beautifulsoup
>>>import requests
>>>contents=requests.get(url).text
>>>soup=beautifulsoup('lxml',contents)
>>>>Text=soup.find('body').text
votes
for x in link:
driver.get(x)
try:
names = driver.find_elements_by_css_selector("td")
i = 0
while i <= len(names):
address = names[i].text.splitlines()
r = len(address)
if r == 4:
print(x, " | ",address[0], " | ", address[1], " | ", address[2], " | ", address[3])
elif r == 3:
print(x, " | ",address[0], " | ", address[1], " | ", address[2])
else:
pass
i=i+1
except(NoSuchElementException, IndexError):
continue
This did the job.
Veuillez ne pas partager d'informations sous forme d'images à moins que cela ne soit absolument nécessaire. Voir: meta.stackoverflow .com / questions / 303812 /… , idownvotedbecau.se/imageofcode , idownvotedbecau.se/imageofanexception .
Pouvez-vous partager votre code?
Ce n'est probablement pas directement lié au problème, mais que se passe-t-il avec le
while 0 <20:eti = i + 1; sinon: i = i + 1;?