J'essaie de changer la couleur du texte du lien dans un lien vers le jaune sur une page qu'un autre script (non contrôlé par moi) génère. Plus précisément, je cherche un texte spécifique dans deux tableaux sur cette page. Une fois que je trouve le texte (qui sont des hyperliens), je veux changer leur couleur en jaune. J'utilise HTML :: Element et je peux facilement trouver le texte. Le problème est qu'il n'y a pas de couleur de lien spécifiée, donc les liens utilisent la valeur par défaut de bleu. J'essaye d'ajouter l'élément HTML de couleur de police à la balise mais je n'ai pas beaucoup de chance.Perl - Changer la couleur d'un lien en utilisant HTML :: Element
Si j'essayer d'utiliser quelque chose comme (où « $ a » est le HTML :: Element objet pour le lien, je suis en train de modifier):
$a->attr("font color", "yellow");
Il ajoute l'attribut mais ne change pas la couleur du texte du lien.
si je tente quelque chose comme:
my $content = $a->content;
$content->attr("font color", "yellow");
Cela ajoute que le texte
<font color=yellow>
au contenu sans, encore une fois, en changeant la couleur du texte de contenu réel.
Essayer de l'épisser ne fonctionne pas non plus.
J'ai finalement frappé sur ce:
my $yellowFont = HTML::Element->new('font', 'color' => 'yellow');
foreach my $item_ref ($a->content_refs_list) {
next if ref $$item_ref;
$yellowFont->push_content($$item_ref);
}
print $yellowFont->as_HTML, "\n";
qui fonctionne à merveille dans le sens où il crée:
<font color="yellow">201301022150-Job5</font>
Mais ce changement ne se reflète pas dans le document html!
Je ne sais pas comment insérer l'attribut de couleur de police dans le document html original.
Voici mon script complet. C'est un désordre parce que j'ai essayé une variété de méthodes différentes sans succès.
#!/usr/local/bin/perl
use warnings;
use strict;
use HTML::TableExtract qw(tree);
use Data::Dumper qw(Dumper);
my @jobList =();
if ($ARGV[0]) {@jobList = $ARGV[0];} else {die ("Need list of jobs as argument\n")};
my $ddHTMLFile = "./tmp_aptg";
my $te1 = HTML::TableExtract->new(depth => 1, count => 0);
my $te2 = HTML::TableExtract->new(depth => 1, count => 1);
$te1->parse_file($ddHTMLFile);
$te2->parse_file($ddHTMLFile);
my $table1 = $te1->first_table_found;
my $table2 = $te2->first_table_found;
my $table1_tree = $table1->tree;
my $table2_tree = $table2->tree;
foreach my $a ($table1_tree->find_by_tag_name("a")) {
my $href = $a->attr("href");
if ($href =~ m/$jobList[0]/) {
my $yellowFont = HTML::Element->new('font', 'color' => 'yellow');
foreach my $item_ref ($a->content_refs_list) {
next if ref $$item_ref;
$yellowFont->push_content($$item_ref);
}
#print $yellowFont->as_HTML, "\n";
$a->replacewith
$a->dump;
#my $table1_html = $table1_tree->as_HTML;
#my $document1_tree = $te1->tree;
#my $document1_html = $document1_tree->as_HTML;
#my $document_html = $document1_html;
#print "$document_html";
}
}
Merci pour la réponse mais je ne peux pas utiliser CSS. La page Web est créée par un script automatisé qui dégorge juste HTML sans n'importe quel lien de CSS et je ne peux pas ajouter n'importe quel CSS (règles d'entreprise). Ma seule et unique solution est l'édition du code HTML que le script génère. –
@phileasfogg Comme je l'ai dit, la solution pour '' peut être facilement adaptée pour utiliser des balises de police, ce qui ne nécessiterait pas de CSS. Fondamentalement 'HTML :: Element-> new (" font ", color =>" jaune ")'. Sachez que la balise '' est apparue dans HTML 3.2, qu'elle était obsolète dans HTML 4.0 Transitional, et qu'elle est * invalide * dans HTML 4.0 Strict et versions ultérieures, donc assurez-vous de vérifier d'abord le doctype. – amon
Ah, désolé, n'a pas lu votre commentaire initial assez près, désolé à ce sujet. Merci encore pour votre aide. –