Próbuję uzyskać wartość atrybutów "tytułu" i zapisz go w pliku CSV z elementu poniżej:

<img src="images/i.png" title="Uwagi: łacina, nieczytelne
Data urodzenia: 25.02.1808 r.">

Cały HTML Oto.

Mam tę atrybutę za pomocą poniżej XPath poniżej (działa):

SelenideElement uwagi = $(By.xpath("//div[@id='table_b_wrapper']//table[@id='table_b']//tbody//tr[1]//img[contains(@title,'Uwagi')]"));  
//tr[1] is just a one example from this table. xpath is ok

Potem próbowałem umieścić go do mojego pliku CSV z:

writer.append(uwagi+";");  //using ; as separator

Problem polega na tym, że ta wartość "Uwagi: Łacina, Niecitelne Data Urodziei: 25.02.1808 r."

Jest podzielony na 2 części i są zapisywane jako oddzielne komórki, takie jak Oto

Potrzebuję całej tej wartości w jednej komórce (I.E. J1731 i A1732 wartości powinny być 1 komórka). Co dziwne, kiedy zrobiłem System.out.println(uwagi.getAttribute("title")); Tylko 2 część wartości atrybutu (dane URODENIA: 25.02.1808 r.) W konsoli. Jak mogę zapisać tę tytułową wartość atrybutów jako jedna komórka w CSV?

Pozdrawiam Tomes.

0
tomes 24 luty 2019, 23:01

2 odpowiedzi

Najlepsza odpowiedź

Znalazłem rozwiązanie. Zmieniłem:

FileWriter writer = new FileWriter(pathString, Charset.forName("Cp1250"));

Do

CsvWriter writer = new CsvWriter(pathString, ';', Charset.forName("Cp1250"));

Używanie również:

    <dependency>
        <groupId>net.sourceforge.javacsv</groupId>
        <artifactId>javacsv</artifactId>
        <version>2.0</version>
    </dependency>

Na podstawie informacji od: Link

Potem zmieniłem pisarza.Append do .

Inne są takie same:

...
    SelenideElement xxx = $x("//img[contains(@title,'Uwagi')]"); 
    String str = xxx.getAttribute("title");
    writer.write(str);
...

Wynik: obraz

Pozdrawiam Tomes.

0
tomes 27 luty 2019, 18:50

Usuń nowy znak linii z tytułu, poniższy kod Wymień \n (New Line Character) z jedną przestrzenią w razie potrzeby na współdzielony HTML. Również w selendzie możesz użyć $x dla selektorów XPath:

SelenideElement uwagi = $x("//table[@id='table_b']//tr[@role='row'][1]//img[contains(@title,'Uwagi')]");

//using css selector
uwagi = $("#table_b tr[role='row'] img[title^='Uwagi']");
//or even shorter
uwagi = $("#table_b img[title^='Uwagi']");

String uwagiTitle = uwagi.text().replace("\n", " ");

writer.append(uwagiTitle+";");
0
Sers 24 luty 2019, 20:36